From 3b125d0952952b1afdf11c1aa98b23ac15b96f67 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Tue, 8 Dec 2020 18:28:24 +0100 Subject: [PATCH] Minor improvement in mesh structure to allow different imput formats. Organization of meshes per geometry type. --- makefile | 2 +- src/modules/makefile | 46 +++++------------- src/modules/mesh/1DCart/makefile | 11 +++++ .../{ => mesh/1DCart}/moduleMesh1D.f95 | 6 +-- .../1DCart}/moduleMesh1DBoundary.f95 | 0 .../{ => mesh/1DCart}/moduleMesh1DRead.f95 | 29 ++++++++++- src/modules/mesh/Cyl/makefile | 11 +++++ src/modules/{ => mesh/Cyl}/moduleMeshCyl.f95 | 10 ++-- .../{ => mesh/Cyl}/moduleMeshCylBoundary.f95 | 0 .../{ => mesh/Cyl}/moduleMeshCylRead.f95 | 33 +++++++++++-- src/modules/mesh/makefile | 11 +++++ src/modules/{ => mesh}/moduleMesh.f95 | 48 +++++++++++++------ src/modules/moduleInput.f95 | 16 ++----- src/modules/moduleSolver.f95 | 35 ++++---------- 14 files changed, 158 insertions(+), 100 deletions(-) create mode 100644 src/modules/mesh/1DCart/makefile rename src/modules/{ => mesh/1DCart}/moduleMesh1D.f95 (99%) rename src/modules/{ => mesh/1DCart}/moduleMesh1DBoundary.f95 (100%) rename src/modules/{ => mesh/1DCart}/moduleMesh1DRead.f95 (88%) create mode 100644 src/modules/mesh/Cyl/makefile rename src/modules/{ => mesh/Cyl}/moduleMeshCyl.f95 (99%) rename src/modules/{ => mesh/Cyl}/moduleMeshCylBoundary.f95 (100%) rename src/modules/{ => mesh/Cyl}/moduleMeshCylRead.f95 (94%) create mode 100644 src/modules/mesh/makefile rename src/modules/{ => mesh}/moduleMesh.f95 (93%) diff --git a/makefile b/makefile index b7d7daa..d0bf091 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build JSONLIB := $(JSONDIR)/lib/libjsonfortran.a JSONINC := $(JSONDIR)/include -INCDIR := +INCDIR := INCDIR += $(JSONINC) VAR := "" diff --git a/src/modules/makefile b/src/modules/makefile index 4249278..ea6a1d6 100644 --- a/src/modules/makefile +++ b/src/modules/makefile @@ -1,46 +1,26 @@ -OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o\ - moduleMesh.o moduleMeshCyl.o moduleMeshCylBoundary.o\ - moduleMeshCylRead.o moduleOutput.o moduleInput.o \ - moduleSolver.o moduleCollisions.o moduleTable.o \ - moduleParallel.o moduleEM.o moduleMesh1D.o \ - moduleMesh1DBoundary.o moduleMesh1DRead.o +OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o \ + moduleOutput.o moduleInput.o moduleSolver.o \ + moduleCollisions.o moduleTable.o moduleParallel.o \ + moduleEM.o -all: $(OBJS) +all: $(OBJS) mesh.o -moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleMeshCyl.f95 +mesh.o: moduleCollisions.o moduleBoundary.o + $(MAKE) -C mesh all + +moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleCollisions.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ -moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleMesh.o moduleMeshCylRead.o moduleMesh1DRead.o moduleErrors.o moduleSpecies.o moduleInput.f95 +moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleErrors.o moduleSpecies.o moduleInput.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ -moduleInject.o: moduleSpecies.o moduleSolver.o moduleMesh.o moduleMeshCyl.o moduleInject.f95 +moduleInject.o: moduleSpecies.o moduleSolver.o moduleInject.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ moduleList.o: moduleSpecies.o moduleErrors.o moduleList.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ -moduleMesh.o: moduleCollisions.o moduleOutput.o moduleList.o moduleSpecies.o moduleMesh.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMeshCyl.o: moduleRefParam.o moduleCollisions.o moduleOutput.o moduleMesh.o moduleMeshCyl.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMeshCylBoundary.o: moduleMeshCyl.o moduleMeshCylBoundary.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMeshCylRead.o: moduleBoundary.o moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMesh1D.o: moduleRefParam.o moduleCollisions.o moduleOutput.o moduleMesh.o moduleMesh1D.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMesh1DBoundary.o: moduleMesh1D.o moduleMesh1DBoundary.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - -moduleMesh1DRead.o: moduleBoundary.o moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.f95 - $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ - moduleOutput.o: moduleSpecies.o moduleRefParam.o moduleOutput.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ @@ -50,13 +30,13 @@ moduleRefParam.o: moduleConstParam.o moduleRefParam.f95 moduleSpecies.o: moduleErrors.o moduleCaseParam.o moduleSpecies.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ -moduleSolver.o: moduleList.o moduleEM.o moduleSpecies.o moduleRefParam.o moduleMesh.o moduleOutput.o moduleSolver.f95 +moduleSolver.o: mesh.o moduleList.o moduleEM.o moduleSpecies.o moduleRefParam.o moduleOutput.o moduleSolver.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ moduleTable.o: moduleErrors.o moduleTable.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ -moduleEM.o: moduleSpecies.o moduleMesh.o moduleEM.f95 +moduleEM.o: mesh.o moduleSpecies.o moduleEM.f95 $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ %.o: %.f95 diff --git a/src/modules/mesh/1DCart/makefile b/src/modules/mesh/1DCart/makefile new file mode 100644 index 0000000..5218e9d --- /dev/null +++ b/src/modules/mesh/1DCart/makefile @@ -0,0 +1,11 @@ +all: moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.o + +moduleMesh1D.o: moduleMesh1D.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + +moduleMesh1DBoundary.o: moduleMesh1D.o moduleMesh1DBoundary.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + +moduleMesh1DRead.o: moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + diff --git a/src/modules/moduleMesh1D.f95 b/src/modules/mesh/1DCart/moduleMesh1D.f95 similarity index 99% rename from src/modules/moduleMesh1D.f95 rename to src/modules/mesh/1DCart/moduleMesh1D.f95 index e151e98..2f320ab 100644 --- a/src/modules/moduleMesh1D.f95 +++ b/src/modules/mesh/1DCart/moduleMesh1D.f95 @@ -109,10 +109,10 @@ MODULE moduleMesh1D END SUBROUTINE initNode1D - FUNCTION getCoord1D(self) RESULT(r) + PURE FUNCTION getCoord1D(self) RESULT(r) IMPLICIT NONE - CLASS(meshNode1D):: self + CLASS(meshNode1D), INTENT(in):: self REAL(8):: r(1:3) r = (/ self%x, 0.D0, 0.D0 /) @@ -369,7 +369,7 @@ MODULE moduleMesh1D END FUNCTION gatherEFSegm - !Get nodes from segment + !Get nodes from 1D volume PURE FUNCTION getNodesSegm(self) RESULT(n) IMPLICIT NONE diff --git a/src/modules/moduleMesh1DBoundary.f95 b/src/modules/mesh/1DCart/moduleMesh1DBoundary.f95 similarity index 100% rename from src/modules/moduleMesh1DBoundary.f95 rename to src/modules/mesh/1DCart/moduleMesh1DBoundary.f95 diff --git a/src/modules/moduleMesh1DRead.f95 b/src/modules/mesh/1DCart/moduleMesh1DRead.f95 similarity index 88% rename from src/modules/moduleMesh1DRead.f95 rename to src/modules/mesh/1DCart/moduleMesh1DRead.f95 index 4b26d2d..1c52795 100644 --- a/src/modules/moduleMesh1DRead.f95 +++ b/src/modules/mesh/1DCart/moduleMesh1DRead.f95 @@ -3,9 +3,11 @@ MODULE moduleMesh1DRead USE moduleMesh1D USE moduleMesh1DBoundary + !TODO: make this abstract to allow different mesh formats TYPE, EXTENDS(meshGeneric):: mesh1DGeneric CONTAINS - PROCEDURE, PASS:: readMesh => readMesh1D + PROCEDURE, PASS:: init => init1DMesh + PROCEDURE, PASS:: readMesh => readMesh1D END TYPE @@ -15,11 +17,34 @@ MODULE moduleMesh1DRead END INTERFACE connected CONTAINS + !Init 1D mesh + SUBROUTINE init1DMesh(self, meshFormat) + USE moduleMesh + USE moduleErrors + IMPLICIT NONE + + CLASS(mesh1DGeneric), INTENT(out):: self + CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat + + SELECT CASE(meshFormat) + CASE ("gmsh") + self%printOutput => printOutputGmsh + self%printColl => printCollGmsh + self%printEM => printEMGmsh + + CASE DEFAULT + CALL criticalError("Mesh type " // meshFormat // " not supported.", "init1D") + + END SELECT + + END SUBROUTINE init1DMesh + + !Reads 1D mesh SUBROUTINE readMesh1D(self, filename) USE moduleBoundary IMPLICIT NONE - CLASS(mesh1DGeneric), INTENT(out):: self + CLASS(mesh1DGeneric), INTENT(inout):: self CHARACTER(:), ALLOCATABLE, INTENT(in):: filename REAL(8):: x INTEGER:: p(1:2) diff --git a/src/modules/mesh/Cyl/makefile b/src/modules/mesh/Cyl/makefile new file mode 100644 index 0000000..7a60575 --- /dev/null +++ b/src/modules/mesh/Cyl/makefile @@ -0,0 +1,11 @@ +all : moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.o + +moduleMeshCyl.o: moduleMeshCyl.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + +moduleMeshCylBoundary.o: moduleMeshCyl.o moduleMeshCylBoundary.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + +moduleMeshCylRead.o: moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + diff --git a/src/modules/moduleMeshCyl.f95 b/src/modules/mesh/Cyl/moduleMeshCyl.f95 similarity index 99% rename from src/modules/moduleMeshCyl.f95 rename to src/modules/mesh/Cyl/moduleMeshCyl.f95 index ded8b5e..2b1362c 100644 --- a/src/modules/moduleMeshCyl.f95 +++ b/src/modules/mesh/Cyl/moduleMeshCyl.f95 @@ -154,10 +154,10 @@ MODULE moduleMeshCyl END SUBROUTINE initNodeCyl - FUNCTION getCoordCyl(self) RESULT(r) + PURE FUNCTION getCoordCyl(self) RESULT(r) IMPLICIT NONE - CLASS(meshNodeCyl):: self + CLASS(meshNodeCyl), INTENT(in):: self REAL(8):: r(1:3) r = (/self%z, self%r, 0.D0/) @@ -367,7 +367,7 @@ MODULE moduleMeshCyl REAL(8):: r, xi(1:3) REAL(8):: fPsi(1:4), dPsi(1:2,1:4) REAL(8):: ke(1:4,1:4) - REAL(8):: j(1:2,1:2), detJ + REAL(8):: invJ(1:2,1:2), detJ INTEGER:: l, m ke=0.D0 @@ -381,9 +381,9 @@ MODULE moduleMeshCyl dPsi(2,:) = self%dPsiXi2(xi(1)) fPsi = self%fPsi(xi) detJ = self%detJac(xi,dPsi) - j = self%invJac(xi,dPsi) + invJ = self%invJac(xi,dPsi) r = DOT_PRODUCT(fPsi,self%r) - ke = ke + MATMUL(TRANSPOSE(MATMUL(j,dPsi)),MATMUL(j,dPsi))*r*wQuad(l)*wQuad(m)/detJ + ke = ke + MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)),MATMUL(invJ,dPsi))*r*wQuad(l)*wQuad(m)/detJ END DO END DO diff --git a/src/modules/moduleMeshCylBoundary.f95 b/src/modules/mesh/Cyl/moduleMeshCylBoundary.f95 similarity index 100% rename from src/modules/moduleMeshCylBoundary.f95 rename to src/modules/mesh/Cyl/moduleMeshCylBoundary.f95 diff --git a/src/modules/moduleMeshCylRead.f95 b/src/modules/mesh/Cyl/moduleMeshCylRead.f95 similarity index 94% rename from src/modules/moduleMeshCylRead.f95 rename to src/modules/mesh/Cyl/moduleMeshCylRead.f95 index b3fa0df..2da8c31 100644 --- a/src/modules/moduleMeshCylRead.f95 +++ b/src/modules/mesh/Cyl/moduleMeshCylRead.f95 @@ -3,9 +3,11 @@ MODULE moduleMeshCylRead USE moduleMeshCyl USE moduleMeshCylBoundary + !TODO: make this abstract to allow different mesh formats TYPE, EXTENDS(meshGeneric):: meshCylGeneric CONTAINS - PROCEDURE, PASS:: readMesh => readMeshCyl + PROCEDURE, PASS:: init => initCylMesh + PROCEDURE, PASS:: readMesh => readMeshCylGmsh END TYPE @@ -15,11 +17,34 @@ MODULE moduleMeshCylRead END INTERFACE connected CONTAINS - SUBROUTINE readMeshCyl(self, filename) - USE moduleBoundary + !Init mesh + SUBROUTINE initCylMesh(self, meshFormat) + USE moduleMesh + USE moduleErrors IMPLICIT NONE CLASS(meshCylGeneric), INTENT(out):: self + CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat + + SELECT CASE(meshFormat) + CASE ("gmsh") + self%printOutput => printOutputGmsh + self%printColl => printCollGmsh + self%printEM => printEMGmsh + + CASE DEFAULT + CALL criticalError("Mesh type " // meshFormat // " not supported.", "initCylMesh") + + END SELECT + + END SUBROUTINE initCylMesh + + !Read mesh from gmsh file + SUBROUTINE readMeshCylGmsh(self, filename) + USE moduleBoundary + IMPLICIT NONE + + CLASS(meshCylGeneric), INTENT(inout):: self CHARACTER(:), ALLOCATABLE, INTENT(in):: filename REAL(8):: r, z INTEGER:: p(1:4) @@ -140,7 +165,7 @@ MODULE moduleMeshCylRead END DO - END SUBROUTINE + END SUBROUTINE readMeshCylGmsh !Selects type of elements to build connection SUBROUTINE connectedVolVol(elemA, elemB) diff --git a/src/modules/mesh/makefile b/src/modules/mesh/makefile new file mode 100644 index 0000000..19e3a13 --- /dev/null +++ b/src/modules/mesh/makefile @@ -0,0 +1,11 @@ +all: moduleMesh.o Cyl.o 1DCart.o + +Cyl.o: + $(MAKE) -C Cyl all + +1DCart.o: + $(MAKE) -C 1DCart all + +moduleMesh.o: moduleMesh.f95 + $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ + diff --git a/src/modules/moduleMesh.f95 b/src/modules/mesh/moduleMesh.f95 similarity index 93% rename from src/modules/moduleMesh.f95 rename to src/modules/mesh/moduleMesh.f95 index 319210b..9e562f4 100644 --- a/src/modules/moduleMesh.f95 +++ b/src/modules/mesh/moduleMesh.f95 @@ -30,9 +30,9 @@ MODULE moduleMesh END SUBROUTINE initNode_interface !Interface to get coordinates from node - FUNCTION getCoord_interface(self) RESULT(r) + PURE FUNCTION getCoord_interface(self) RESULT(r) IMPORT:: meshNode - CLASS(meshNode):: self + CLASS(meshNode), INTENT(in):: self REAL(8):: r(1:3) END FUNCTION getCoord_interface @@ -210,7 +210,7 @@ MODULE moduleMesh END SUBROUTINE collision_interface - SUBROUTINE resetOutput_interface(self) + PURE SUBROUTINE resetOutput_interface(self) IMPORT:: meshVol CLASS(meshVol), INTENT(inout):: self @@ -237,25 +237,44 @@ MODULE moduleMesh REAL(8), ALLOCATABLE, DIMENSION(:,:):: K !Permutation matrix for P L U factorization INTEGER, ALLOCATABLE, DIMENSION(:,:):: IPIV + PROCEDURE(printOutput_interface), POINTER, PASS:: printOutput => NULL() + PROCEDURE(printColl_interface), POINTER, PASS:: printColl => NULL() + PROCEDURE(printEM_interface), POINTER, PASS:: printEM => NULL() CONTAINS - PROCEDURE(readMesh_interface), DEFERRED, PASS:: readMesh - PROCEDURE, PASS:: printOutput - PROCEDURE, PASS:: printColl - PROCEDURE, PASS:: printEM + PROCEDURE(initMesh_interface), DEFERRED, PASS:: init + PROCEDURE(readMesh_interface), DEFERRED, PASS:: readMesh END TYPE meshGeneric ABSTRACT INTERFACE + !Inits the mesh + SUBROUTINE initMesh_interface(self, meshFormat) + IMPORT meshGeneric + + CLASS(meshGeneric), INTENT(out):: self + CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat + + END SUBROUTINE initMesh_interface + !Reads the mesh from a file SUBROUTINE readMesh_interface(self, filename) IMPORT meshGeneric - CLASS(meshGeneric), INTENT(out):: self + CLASS(meshGeneric), INTENT(inout):: self CHARACTER(:), ALLOCATABLE, INTENT(in):: filename END SUBROUTINE readMesh_interface + !Prints Species data + SUBROUTINE printOutput_interface(self, t) + IMPORT meshGeneric + + CLASS(meshGeneric), INTENT(in):: self + INTEGER, INTENT(in):: t + + END SUBROUTINE printOutput_interface + !Prints number of collisions SUBROUTINE printColl_interface(self, t) IMPORT meshGeneric @@ -273,6 +292,7 @@ MODULE moduleMesh INTEGER, INTENT(in):: t END SUBROUTINE printEM_interface + END INTERFACE !Generic mesh @@ -397,7 +417,7 @@ MODULE moduleMesh END SUBROUTINE collision - SUBROUTINE printOutput(self, t) + SUBROUTINE printOutputGmsh(self, t) USE moduleRefParam USE moduleSpecies USE moduleOutput @@ -478,9 +498,9 @@ MODULE moduleMesh END DO - END SUBROUTINE printOutput + END SUBROUTINE printOutputGmsh - SUBROUTINE printColl(self, t) + SUBROUTINE printCollGmsh(self, t) USE moduleRefParam USE moduleCaseParam USE moduleOutput @@ -522,9 +542,9 @@ MODULE moduleMesh END IF - END SUBROUTINE printColl + END SUBROUTINE printCollGmsh - SUBROUTINE printEM(self, t) + SUBROUTINE printEMGmsh(self, t) USE moduleRefParam USE moduleCaseParam USE moduleOutput @@ -581,6 +601,6 @@ MODULE moduleMesh END IF - END SUBROUTINE printEM + END SUBROUTINE printEMGmsh END MODULE moduleMesh diff --git a/src/modules/moduleInput.f95 b/src/modules/moduleInput.f95 index 05813d3..25b00d3 100644 --- a/src/modules/moduleInput.f95 +++ b/src/modules/moduleInput.f95 @@ -369,7 +369,7 @@ MODULE moduleInput TYPE(json_file), INTENT(inout):: config LOGICAL:: found - CHARACTER(:), ALLOCATABLE:: geometryType, meshType, meshFile + CHARACTER(:), ALLOCATABLE:: geometryType, meshFormat, meshFile CHARACTER(:), ALLOCATABLE:: fullPath !Selects the type of geometry. @@ -389,18 +389,10 @@ MODULE moduleInput END SELECT !Gets the type of mesh - CALL config%get('geometry.meshType', meshType, found) - SELECT CASE(meshType) - CASE ("gmsh") - !Gets the gmsh file - CALL config%get('geometry.meshFile', meshFile, found) - - CASE DEFAULT - CALL criticalError("Mesh type " // meshType // " not supported.", "readGeometry") - - END SELECT - + CALL config%get('geometry.meshType', meshFormat, found) + CALL mesh%init(meshFormat) !Reads the mesh + CALL config%get('geometry.meshFile', meshFile, found) fullpath = path // meshFile CALL mesh%readMesh(fullPath) diff --git a/src/modules/moduleSolver.f95 b/src/modules/moduleSolver.f95 index b8708ee..60c1bd3 100644 --- a/src/modules/moduleSolver.f95 +++ b/src/modules/moduleSolver.f95 @@ -95,9 +95,6 @@ MODULE moduleSolver CASE('Electrostatic') self%solveEM => solveElecField - CASE DEFAULT - self%solveEM => noEMField - END SELECT END SUBROUTINE initEM @@ -114,9 +111,6 @@ MODULE moduleSolver CASE ('Volume') self%nonAnalogue => volumeNAScheme - CASE DEFAULT - self%nonAnalogue => noNAScheme - END SELECT END SUBROUTINE initNA @@ -356,6 +350,7 @@ MODULE moduleSolver SUBROUTINE doScatter USE moduleSpecies USE moduleMesh + IMPLICIT NONE INTEGER:: n @@ -372,7 +367,10 @@ MODULE moduleSolver SUBROUTINE doEMField() IMPLICIT NONE - CALL solver%solveEM() + IF (ASSOCIATED(solver%solveEM)) THEN + CALL solver%solveEM() + + END IF END SUBROUTINE doEMField @@ -421,12 +419,6 @@ MODULE moduleSolver END SUBROUTINE solveElecField - !Empty procedure that does no computation of EM field for neutral cases - SUBROUTINE noEMField() - IMPLICIT NONE - - END SUBROUTINE noEMField - !Modify particle weight as a function of cell volume and splits particle SUBROUTINE volumeNAScheme(part, volOld, volNew) USE moduleSpecies @@ -500,18 +492,6 @@ MODULE moduleSolver END SUBROUTINE splitParticle - !Empty procedure that does no computation of EM field for neutral cases - SUBROUTINE noNAScheme(part, volOld, volNew) - USE moduleSpecies - USE moduleMesh - IMPLICIT NONE - - TYPE(particle), INTENT(inout):: part - CLASS(meshVol), POINTER, INTENT(in):: volOld - CLASS(meshVol), POINTER, INTENT(inout):: volNew - - END SUBROUTINE noNAScheme - SUBROUTINE updateParticleCell(self, part) USE moduleSpecies USE moduleMesh @@ -525,7 +505,10 @@ MODULE moduleSolver CALL volOld%findCell(part) volNew => mesh%vols(part%vol)%obj !Call the NA shcme - CALL self%nonAnalogue(part, volOld, volNew) + IF (ASSOCIATED(self%nonAnalogue)) THEN + CALL self%nonAnalogue(part, volOld, volNew) + + END IF END SUBROUTINE updateParticleCell