Here is another riddle:
If Body 1 and Body 2 are different with a mesh encompassing both but the Solver1 is only to be executed on Body 1:
......
Body 1
Target Bodies(1) = 1
Name = "Body 1"
Equation = 1
Material = 1
End
Equation 1
Name = "whatever"
Active Solvers(1) = 1
End
Body 2
Target Bodies(1) = 2
Name = "Body 1"
Equation = 2
Material = 2
End
Equation 2
Name = "whatever"
Active Solvers(1) = 2
End
Solver 1
Equation = "mu"
Variable = "none"
Variable DOFs = 1
Exported Variable 1 = mu
Procedure = "flnm" "GetMu"
.........
Solver 2
.....
SUBROUTINE GetMu( Model,Solver,dt,TransientSimulation )
USE DefUtils
......
TYPE(Variable_t), POINTER :: muVar
muVar => VariableGet( Solver % Mesh % Variables,'mu')
mu => muVar % Values
Print *, SIZE(mu)
........
I presume the standard Elmer solvers will only consider mesh nodes that belong to Body 1 and not Body 2. Print *, SIZE(mu) would then display the number of nodes in Body 1 (assuming mu is a scalar field variable)
But now if I replace Active Solvers(1) = 2 by Active Solvers(1) = 1 for Equation 2 above I would expect Solver1 to be executed for both bodies
So what should be expected to be displayed by
Print *, SIZE(mu)
For some mysterious reason, this display does not change from when Solver1 was being executed only on Body 1
total node number considered for solver
Re: total node number considered for solver
A variable (of type Variable_t) is associated with a permutation array showing whether this variable is active at a node and how the entries are mapped in the assembly. To see the number of DOFs which are active one may test
-- Mika
Code: Select all
COUNT( muVar % Perm > 0)
Re: total node number considered for solver
Thanks a lot for the reply. I have now greater understanding of the code and as a byproduct, I now know that when I write a new solver, I need to add an if statement to skip the current index in a loop over all nodes of a given mesh:
muPerm => muVar % Perm
DO i=1,Model % NumberOfNodes
IF( muPerm(i) == 0 ) CYCLE
..............
END DO
muPerm => muVar % Perm
DO i=1,Model % NumberOfNodes
IF( muPerm(i) == 0 ) CYCLE
..............
END DO