Пример #1
0
    def move_mesh(self, event: str, iteration: str):
        """
        Move mesh to simulation mesh path, where model will be added to it

        :param event: Name of event
        :type event: str
        :param iteration: Name of iteration
        :type iteration: str
        """
        import shutil

        has, event_mesh = lapi.find_event_mesh(self.lasif_comm, event)

        if not has:
            raise ValueError(f"{event_mesh} does not exist")
        else:
            event_iteration_mesh = lapi.get_simulation_mesh(
                self.lasif_comm, event, iteration)
            if not os.path.exists(event_iteration_mesh):
                if not os.path.exists(os.path.dirname(event_iteration_mesh)):
                    os.makedirs(os.path.dirname(event_iteration_mesh))
                shutil.copy(event_mesh, event_iteration_mesh)
                print(
                    f"Mesh for event: {event} has been moved to correct path for "
                    f"iteration: {iteration} and is ready for interpolation.")
            else:
                print(f"Mesh for event: {event} already exists in the "
                      f"correct path for iteration {iteration}. "
                      f"Will not move new one.")
Пример #2
0
    def has_mesh(self, event: str) -> bool:
        """
        Check whether mesh has been constructed for respective event

        :param event: Name of event
        :type event: str
        :return: Answer whether mesh exists
        :rtype: bool
        """
        has, _ = lapi.find_event_mesh(self.lasif_comm, event)

        return has
Пример #3
0
 def find_event_mesh(self, event: str) -> pathlib.Path:
     """
     Find the path for an event mesh
     
     :param event: Name of event
     :type event: str
     :return: Path to where the mesh is stored.
     :rtype: Pathlib.Path
     """
     if self.comm.project.meshes == "mono-mesh":
         mesh = self.lasif_comm.project.lasif_config["domain_settings"][
             "domain_file"]
         return mesh
     has, mesh = lapi.find_event_mesh(self.lasif_comm, event)
     if not has:
         raise InversionsonError(
             f"Mesh for event: {event} can not be found.")
     return pathlib.Path(mesh)
Пример #4
0
    def has_mesh(self, event: str, hpc_cluster=None) -> bool:
        """
        Check whether mesh has been constructed for respective event

        :param event: Name of event
        :type event: str
        :return: Answer whether mesh exists
        :rtype: bool
        """
        # If interpolations are remote, we check for mesh remotely too
        if self.comm.project.interpolation_mode == "remote":
            has, _ = self.has_remote_mesh(event,
                                          gradient=False,
                                          hpc_cluster=hpc_cluster)
        else:
            has, _ = lapi.find_event_mesh(self.lasif_comm, event)

        return has
Пример #5
0
    def move_mesh(self, event: str, iteration: str):
        """
        Move mesh to simulation mesh path, where model will be added to it

        :param event: Name of event
        :type event: str
        :param iteration: Name of iteration
        :type iteration: str
        """
        import shutil

        # If we use mono-mesh we copy the salvus opt mesh here.
        if self.comm.project.meshes == "mono-mesh":
            self.comm.salvus_mesher.write_new_opt_fields_to_simulation_mesh()
            return

        has, event_mesh = lapi.find_event_mesh(self.lasif_comm, event)

        if not has:
            raise ValueError(f"{event_mesh} does not exist")
        else:
            event_iteration_mesh = lapi.get_simulation_mesh(
                self.lasif_comm, event, iteration
            )
            if not os.path.exists(event_iteration_mesh):
                if not os.path.exists(os.path.dirname(event_iteration_mesh)):
                    os.makedirs(os.path.dirname(event_iteration_mesh))
                shutil.copy(event_mesh, event_iteration_mesh)
                event_xdmf = event_mesh[:-2] + "xdmf"
                event_iteration_xdmf = event_iteration_mesh[:-2] + "xdmf"
                shutil.copy(event_xdmf, event_iteration_xdmf)
                print(
                    f"Mesh for event: {event} has been moved to correct path for "
                    f"iteration: {iteration} and is ready for interpolation."
                )
            else:
                print(
                    f"Mesh for event: {event} already exists in the "
                    f"correct path for iteration {iteration}. "
                    f"Will not move new one."
                )
Пример #6
0
    def _move_mesh_to_cluster(self,
                              event: str,
                              gradient=False,
                              hpc_cluster=None):
        """
        Move the mesh to the cluster for interpolation

        :param event: Name of event
        :type event: str
        """
        if event is None:
            if gradient:
                self.print("Moving example gradient to cluster",
                           emoji_alias=":package:")
                self.move_gradient_to_cluster(hpc_cluster)
            else:
                # This happens when we want to move the model to the cluster
                self.print("Moving model to cluster", emoji_alias=":package:")
                self._move_model_to_cluster(hpc_cluster)
            return
        has, event_mesh = lapi.find_event_mesh(self.lasif_comm, event)

        if not has:
            raise InversionsonError(f"Mesh for event {event} does not exist.")
        # Get remote connection
        if hpc_cluster is None:
            hpc_cluster = get_site(self.comm.project.interpolation_site)

        path_to_mesh = self.find_remote_mesh(
            event=event,
            interpolate_to=True,
            check_if_exists=False,
            hpc_cluster=hpc_cluster,
        )
        if not hpc_cluster.remote_exists(path_to_mesh.parent):
            hpc_cluster.remote_mkdir(path_to_mesh.parent)
        if not hpc_cluster.remote_exists(path_to_mesh):
            self.print(f"Moving mesh for event {event} to cluster",
                       emoji_alias=":package:")
            hpc_cluster.remote_put(event_mesh, path_to_mesh)
Пример #7
0
    def move_mesh(self,
                  event: str,
                  iteration: str,
                  hpc_cluster=None,
                  validation=False):
        """
        Move mesh to simulation mesh path, where model will be added to it

        :param event: Name of event
        :type event: str
        :param iteration: Name of iteration
        :type iteration: str
        """
        import shutil

        # If we use mono-mesh we copy the salvus opt mesh here.
        if self.comm.project.meshes == "mono-mesh":
            optimizer = self.comm.project.get_optimizer()
            model = optimizer.model_path
            # copy to lasif project and also move to cluster
            simulation_mesh = self.comm.lasif.get_simulation_mesh(
                event_name=None)
            shutil.copy(model, simulation_mesh)
            self._move_model_to_cluster(hpc_cluster=hpc_cluster,
                                        overwrite=False,
                                        validation=validation)

            return
        if self.comm.project.interpolation_mode == "remote":
            if event is None:
                self._move_model_to_cluster(
                    hpc_cluster=hpc_cluster,
                    overwrite=False,
                    validation=validation,
                )
            else:
                self._move_mesh_to_cluster(event=event,
                                           hpc_cluster=hpc_cluster)
            return

        has, event_mesh = lapi.find_event_mesh(self.lasif_comm, event)

        if not has:
            raise ValueError(f"{event_mesh} does not exist")
        else:
            event_iteration_mesh = lapi.get_simulation_mesh(
                self.lasif_comm, event, iteration)
            if not os.path.exists(event_iteration_mesh):
                if not os.path.exists(os.path.dirname(event_iteration_mesh)):
                    os.makedirs(os.path.dirname(event_iteration_mesh))
                shutil.copy(event_mesh, event_iteration_mesh)
                event_xdmf = event_mesh[:-2] + "xdmf"
                event_iteration_xdmf = event_iteration_mesh[:-2] + "xdmf"
                shutil.copy(event_xdmf, event_iteration_xdmf)
                self.print(
                    f"Mesh for event: {event} has been moved to correct path for "
                    f"iteration: {iteration} and is ready for interpolation.",
                    emoji_alias=":package:",
                )
            else:
                self.print(
                    f"Mesh for event: {event} already exists in the "
                    f"correct path for iteration {iteration}. "
                    f"Will not move new one.",
                    emoji_alias=":white_check_mark",
                )