From 556c94b24e137571a459169d28552ee24b82ddfe Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Thu, 3 Oct 2024 15:30:54 +0200
Subject: [PATCH 1/8] add new argument int* jMap in addMatMapij

---
 trunk/mseMatTools/src/mseMatTools.c | 8 ++++----
 trunk/mseMatTools/src/mseMatTools.h | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/trunk/mseMatTools/src/mseMatTools.c b/trunk/mseMatTools/src/mseMatTools.c
index edd51c6..f3e952e 100644
--- a/trunk/mseMatTools/src/mseMatTools.c
+++ b/trunk/mseMatTools/src/mseMatTools.c
@@ -56,7 +56,7 @@ void assembleMat(Mat matOut, Mat matIn,int NOffset, int MOffset){
 /*
 *#pMatOut = pMatOut + pMatIn[iMap[i],iMap[j]]
 **/
-void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int iLength, int iMask, int jMask){
+void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int *jMap, int iLength, int iMask, int jMask){
   PetscInt NO,MO;
   MatGetSize(matOut,&NO,&MO);
   PetscInt NI,MI,i,ii,iOffseted;
@@ -71,11 +71,11 @@ void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int iLength, in
 #ifdef mseMatToolsS_VERBOSE
     printf("mseMatToolsS addMatMapij No=%i Mo=%i Ni=%i Mi=%i.\n",NO,MO,NI,MI);
     if (iMask && jMask)
-      printf("   doing matOut[iMap[i],iMap[j]]+=matIn[i,j]\n");
+      printf("   doing matOut[iMap[i],jMap[j]]+=matIn[i,j]\n");
     else if (iMask)
       printf("   doing matOut[iMap[i],j]+=matIn[i,j]\n");
     else if (jMask)
-      printf("   doing matOut[i,iMap[j]]+=matIn[i,j]\n");
+      printf("   doing matOut[i,jMap[j]]+=matIn[i,j]\n");
 #endif
 
   for (i = 0; i < NI; i++) {
@@ -89,7 +89,7 @@ void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int iLength, in
     printf("mseMatToolsS addMatMapij row %i, with %i nc\n",i,nc);
 #endif
     for (ii=0;ii<nc;ii++){
-      ajOffseted[ii]=jMask?iMap[aj[ii]]:aj[ii];
+      ajOffseted[ii]=jMask?jMap[aj[ii]]:aj[ii];
       copyaa[ii]=alpha* copyaa[ii];
     }
     iOffseted=iMask?iMap[i]:i;
diff --git a/trunk/mseMatTools/src/mseMatTools.h b/trunk/mseMatTools/src/mseMatTools.h
index c50e4ad..6d4f5ac 100644
--- a/trunk/mseMatTools/src/mseMatTools.h
+++ b/trunk/mseMatTools/src/mseMatTools.h
@@ -11,7 +11,7 @@ void assembleVec(Vec pVecOut,Vec pVecIn,int Offset);
 *#pMatOut = pMatOut + pMatIn[iMap[i],iMap[j]]
 * memo: numpy.i export array in  (int *iMap, int iLength)
 **/
-void addMatMapij(Mat pMatOut, double alpha, Mat pMatIn, int *iMap, int iLength, int iMask, int jMask);
+void addMatMapij(Mat pMatOut, double alpha, Mat pMatIn, int *iMap, int* jMap, int iLength, int iMask, int jMask);
 void printMat(Mat aMat);
 void saveVec(char* fileName,double *dVec, int dLength);
 void loadVec(char* fileName,double *dVec, int dLength);
-- 
GitLab


From 1a51d50a7de77efccaabfc675d82321d48771fde Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Fri, 4 Oct 2024 11:31:05 +0200
Subject: [PATCH 2/8] TO FIX: modif to add new argument, study3 doesn't work

---
 trunk/mseMatTools/src/mseMatTools.c       | 2 +-
 trunk/mseMatTools/src/mseMatTools.h       | 2 +-
 trunk/src/mse/INTERACTIONS/interaction.py | 6 +++---
 trunk/src/mse/linAlgTools.py              | 4 ++--
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/trunk/mseMatTools/src/mseMatTools.c b/trunk/mseMatTools/src/mseMatTools.c
index f3e952e..64c91d2 100644
--- a/trunk/mseMatTools/src/mseMatTools.c
+++ b/trunk/mseMatTools/src/mseMatTools.c
@@ -56,7 +56,7 @@ void assembleMat(Mat matOut, Mat matIn,int NOffset, int MOffset){
 /*
 *#pMatOut = pMatOut + pMatIn[iMap[i],iMap[j]]
 **/
-void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int *jMap, int iLength, int iMask, int jMask){
+void addMatMapij(Mat matOut, double alpha, Mat matIn, int *iMap, int iLength, int *jMap, int jLength, int iMask, int jMask){
   PetscInt NO,MO;
   MatGetSize(matOut,&NO,&MO);
   PetscInt NI,MI,i,ii,iOffseted;
diff --git a/trunk/mseMatTools/src/mseMatTools.h b/trunk/mseMatTools/src/mseMatTools.h
index 6d4f5ac..b8fd108 100644
--- a/trunk/mseMatTools/src/mseMatTools.h
+++ b/trunk/mseMatTools/src/mseMatTools.h
@@ -11,7 +11,7 @@ void assembleVec(Vec pVecOut,Vec pVecIn,int Offset);
 *#pMatOut = pMatOut + pMatIn[iMap[i],iMap[j]]
 * memo: numpy.i export array in  (int *iMap, int iLength)
 **/
-void addMatMapij(Mat pMatOut, double alpha, Mat pMatIn, int *iMap, int* jMap, int iLength, int iMask, int jMask);
+void addMatMapij(Mat pMatOut, double alpha, Mat pMatIn, int *iMap, int iLength, int* jMap, int jLength, int iMask, int jMask);
 void printMat(Mat aMat);
 void saveVec(char* fileName,double *dVec, int dLength);
 void loadVec(char* fileName,double *dVec, int dLength);
diff --git a/trunk/src/mse/INTERACTIONS/interaction.py b/trunk/src/mse/INTERACTIONS/interaction.py
index 1d76fed..658ee35 100644
--- a/trunk/src/mse/INTERACTIONS/interaction.py
+++ b/trunk/src/mse/INTERACTIONS/interaction.py
@@ -127,10 +127,10 @@ class interaction2D1D(interaction):
         self.addM2D1D.setDim(self.dS2D.nbDofsPerComp,self.dS1D.nbDofsPerComp)
         self.addM1D2D=matrix()
         self.addM1D2D.setDim(self.dS1D.nbDofsPerComp,self.dS2D.nbDofsPerComp)
-        self.addM2D.addMatMapij(1.0,self.dS1D.massMat,self.index1DTo2D,1,1)
+        self.addM2D.addMatMapij(1.0,self.dS1D.massMat,self.index1DTo2D,self.index1DTo2D,1,1)
         self.addM1D.axpy(1.0,self.dS1D.massMat)
-        self.addM2D1D.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,1,0)
-        self.addM1D2D.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,0,1)
+        self.addM2D1D.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,self.index1DTo2D,1,0)
+        self.addM1D2D.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,self.index1DTo2D,0,1)
         for i in range(self.dS1.nbComps):
             if (self.compsInvolved[i]):
                 #self.addM1=self.addM2D
diff --git a/trunk/src/mse/linAlgTools.py b/trunk/src/mse/linAlgTools.py
index ddd6f03..50da82b 100644
--- a/trunk/src/mse/linAlgTools.py
+++ b/trunk/src/mse/linAlgTools.py
@@ -74,8 +74,8 @@ class matrix:
     # if Jmask and not Imask:
     #    self[i,iMap[j]] = self[i,iMap[j]] + alpha*aMat[i,j] ou i,j index de aMat
     
-    def addMatMapij(self,alpha,aMat,iMap,Imask,Jmask):
-        MT.addMatMapij(self.petscMat,alpha,aMat.petscMat,iMap,Imask,Jmask)
+    def addMatMapij(self,alpha,aMat,iMap,jMap,Imask,Jmask):
+        MT.addMatMapij(self.petscMat,alpha,aMat.petscMat,iMap,jMap,Imask,Jmask)
 
 
 class vector:
-- 
GitLab


From 3cf5e22b21f61684601fbb1fab1abd5899e0f91d Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Fri, 4 Oct 2024 17:58:15 +0200
Subject: [PATCH 3/8] modif in file mseMatTools.i.in

---
 trunk/mseMatTools/Frontend/mseMatTools.i.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/trunk/mseMatTools/Frontend/mseMatTools.i.in b/trunk/mseMatTools/Frontend/mseMatTools.i.in
index c4c9ccc..dec4960 100644
--- a/trunk/mseMatTools/Frontend/mseMatTools.i.in
+++ b/trunk/mseMatTools/Frontend/mseMatTools.i.in
@@ -11,6 +11,7 @@
 %}
 
 %apply (int *IN_ARRAY1, int DIM1) {(int* iMap, int iLength)} 
+%apply (int *IN_ARRAY1, int DIM1) {(int* jMap, int jLength)}
 %apply (double *IN_ARRAY1, int DIM1) {(double *dVec, int dLength)} 
 %apply (double *IN_ARRAY1, int DIM1) {(double *dVec1, int dLength1)} 
 %apply (double *IN_ARRAY1, int DIM1) {(double *dVec2, int dLength2)} 
-- 
GitLab


From 29ba617d9190799849ce093433d9c75810689b99 Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Tue, 8 Oct 2024 09:30:08 +0200
Subject: [PATCH 4/8] add class interaction1D1D, without test

---
 trunk/src/mse/INTERACTIONS/interaction.py | 31 +++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/trunk/src/mse/INTERACTIONS/interaction.py b/trunk/src/mse/INTERACTIONS/interaction.py
index 658ee35..f793076 100644
--- a/trunk/src/mse/INTERACTIONS/interaction.py
+++ b/trunk/src/mse/INTERACTIONS/interaction.py
@@ -141,3 +141,34 @@ class interaction2D1D(interaction):
                 self.addM12.assembleMat(self.addM2D1D,i*self.dS2.nbDofsPerComp,i*self.dS1.nbDofsPerComp)
                 #self.addM21=self.addM1D2D
                 self.addM21.assembleMat(self.addM1D2D,i*self.dS1.nbDofsPerComp,i*self.dS2.nbDofsPerComp)
+###
+# CLASS INTERACTION 1D1D
+###
+class interaction1D1D(interaction):
+    def __init__(self, aStudy, aDS1d1, aDS1d2, aCompsInvolved=None) -> None:
+        super().init__init__(aStudy,aDS1d1,aDS1d2,aCompsInvolved)
+        self.dS1D1=aDS1d1
+        self.dS1D2=aDS1d2
+        if (self.dS1D1.geoDim != 1 or self.dS1D1.geoDim != 1):
+            print("ERROR in interaction2D1D, wrong dimension " +str(self.dS2D.aGeoDim)+" "+self.dS1D.aGeoDim)
+            exit()
+        # ?
+        self.c1d2d=1
+        self.c2d1D=1
+        #
+        self.indexG1ToG2=np.zeros((self.dS1D1.nbDofsPerComp,),dtype=np.int32)
+        self.indexG2ToG1=np.zeros((self.dS1D2.nbDofsPerComp,),dtype=np.int32)# dS1D1.nbDof == dS1D2.nbDof
+        buildMapG1ToG2(self.dS1D1,self.dS1D2,self.indexG1ToG2)
+        buildMapG2ToG1(self.dS1D2,self.dS1D1,self.indexG2ToG1)
+        self.addM2=matrix()
+        self.addM2.setDim(self.dS1D2.nbDofsPerComp,self.dS1D2.nbDofsPerComp)
+        self.addM1=matrix()
+        self.addM1.setDim(self.dS1D1.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+        self.addM21=matrix()
+        self.addM21.setDim(self.dS1D2.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+        self.addM12=matrix()
+        self.addM12.setDim(self.dS1D1.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+        self.addM2.axpy(1.0,self.dS1D2.massMat)
+        self.addM1.axpy(1.0,self.dS1D1.massMat)
+        self.addM21.addMatMapij(-1.0,self.dS1D.massMat,self.index2DTo1D,self.index2DTo1D,0,1)
+        self.addM12.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,self.index1DTo2D,0,1)
-- 
GitLab


From 2f540686a6b05b76c59a14186f8bdf09d4fa1efd Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Tue, 8 Oct 2024 16:55:04 +0200
Subject: [PATCH 5/8] patch interaction 1D1D

---
 trunk/src/mse/INTERACTIONS/interaction.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/trunk/src/mse/INTERACTIONS/interaction.py b/trunk/src/mse/INTERACTIONS/interaction.py
index f793076..3639808 100644
--- a/trunk/src/mse/INTERACTIONS/interaction.py
+++ b/trunk/src/mse/INTERACTIONS/interaction.py
@@ -146,7 +146,7 @@ class interaction2D1D(interaction):
 ###
 class interaction1D1D(interaction):
     def __init__(self, aStudy, aDS1d1, aDS1d2, aCompsInvolved=None) -> None:
-        super().init__init__(aStudy,aDS1d1,aDS1d2,aCompsInvolved)
+        super().__init__(aStudy,aDS1d1,aDS1d2,aCompsInvolved)
         self.dS1D1=aDS1d1
         self.dS1D2=aDS1d2
         if (self.dS1D1.geoDim != 1 or self.dS1D1.geoDim != 1):
@@ -158,8 +158,8 @@ class interaction1D1D(interaction):
         #
         self.indexG1ToG2=np.zeros((self.dS1D1.nbDofsPerComp,),dtype=np.int32)
         self.indexG2ToG1=np.zeros((self.dS1D2.nbDofsPerComp,),dtype=np.int32)# dS1D1.nbDof == dS1D2.nbDof
-        buildMapG1ToG2(self.dS1D1,self.dS1D2,self.indexG1ToG2)
-        buildMapG2ToG1(self.dS1D2,self.dS1D1,self.indexG2ToG1)
+        buildMap1DTo2D(self.dS1D1,self.dS1D2,self.indexG1ToG2)
+        buildMap1DTo2D(self.dS1D2,self.dS1D1,self.indexG2ToG1)
         self.addM2=matrix()
         self.addM2.setDim(self.dS1D2.nbDofsPerComp,self.dS1D2.nbDofsPerComp)
         self.addM1=matrix()
@@ -170,5 +170,5 @@ class interaction1D1D(interaction):
         self.addM12.setDim(self.dS1D1.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
         self.addM2.axpy(1.0,self.dS1D2.massMat)
         self.addM1.axpy(1.0,self.dS1D1.massMat)
-        self.addM21.addMatMapij(-1.0,self.dS1D.massMat,self.index2DTo1D,self.index2DTo1D,0,1)
-        self.addM12.addMatMapij(-1.0,self.dS1D.massMat,self.index1DTo2D,self.index1DTo2D,0,1)
+        self.addM21.addMatMapij(-1.0,self.dS1D2.massMat,self.indexG2ToG1,self.indexG2ToG1,0,1)
+        self.addM12.addMatMapij(-1.0,self.dS1D1.massMat,self.indexG1ToG2,self.indexG1ToG2,0,1)
-- 
GitLab


From 59e0aea89619416b1d477ec4bae61f1560146a83 Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Tue, 8 Oct 2024 16:56:31 +0200
Subject: [PATCH 6/8] new study to test class interaction1D1D + new file
 sourceModel affineGrowth with param

---
 trunk/BD_MODELS/affineGrowthParam.txt |   1 +
 trunk/DEMOS/study14.py                | 106 ++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100644 trunk/BD_MODELS/affineGrowthParam.txt
 create mode 100644 trunk/DEMOS/study14.py

diff --git a/trunk/BD_MODELS/affineGrowthParam.txt b/trunk/BD_MODELS/affineGrowthParam.txt
new file mode 100644
index 0000000..7c268fa
--- /dev/null
+++ b/trunk/BD_MODELS/affineGrowthParam.txt
@@ -0,0 +1 @@
+Fa=p1-a
diff --git a/trunk/DEMOS/study14.py b/trunk/DEMOS/study14.py
new file mode 100644
index 0000000..bae64fb
--- /dev/null
+++ b/trunk/DEMOS/study14.py
@@ -0,0 +1,106 @@
+from mse.study import study
+from mse.dynamicalSystem import dynamicalSystem,computeMass
+from mse.DISPERSIONS.diffusionModel import diffusionModel
+from mse.MODELS.models import txtModel
+from mse.system import system
+from mse.simulator import simulator
+from mse.timeDoOneStep import timeDoOneStep
+from mse.TIMESCHEMES.timeScheme import implicitLinearTimeScheme,implicitNonLinearTimeScheme
+from mse.INTERACTIONS.interaction import interaction2D1D, interaction1D1D
+from mse.toolsEnv import computerEnv,MSEPrint
+from mse.explorTrajectory import explorTrajectory
+from os import  mkdir
+from os.path import isdir
+
+
+nbComps=1
+WITH_AFFINE_GROWTH=1
+testNLTS=0
+studName="STUDY14_DIFFUSION"
+if (WITH_AFFINE_GROWTH):
+    studName=studName+"_AND_AFFINE_GROWTH"
+nbParam=1
+#a study
+aStudy=study(studName, nbParam)
+# the study zone
+aStudy.setGeometry("SIMPLE2",0.4)
+aStudy.setParam([0.5])
+
+# a system
+aSystem=system(aStudy)
+# dynamical  system 
+# First DS
+ds2d1=dynamicalSystem(aStudy,2,"surface1.xdmf",nbComps=nbComps)
+# Second DS
+ds2d2=dynamicalSystem(aStudy,2,"surface2.xdmf",nbComps=nbComps)
+# edge
+ds1d1=dynamicalSystem(aStudy,1,"edge2.xdmf",nbComps=nbComps)
+ds1d2=dynamicalSystem(aStudy,1,"edge2.xdmf",nbComps=nbComps)
+y0=-0.45
+coefInit = 1
+ds2d1.initialState[0]="np.exp(-"+str(coefInit)+"*(x[0]*0.0+(x[1]-"+str(y0)+")**2))"
+ds2d2.initialState[0]="0.0*"+ds2d2.initialState[0]
+ds1d1.initialState[0]="np.exp(-"+str(coefInit)+"*(x[0]*0.0+(x[1]-"+str(y0)+")**2))"
+ds1d2.initialState[0]="0.0*"+ds2d2.initialState[0]
+if (nbComps>1):
+    ds2d1.initialState[1]="0+0.0*"+ds2d1.initialState[0]
+    ds2d2.initialState[1]="0.0+0.0*"+ds2d1.initialState[0]
+    ds1d1.initialState[1]="0.0+0.0*"+ds2d1.initialState[0]
+    ds1d2.initialState[1]="0.0+0.0*"+ds2d1.initialState[0]
+#
+
+#add diffusion motion
+diffCoefOmega = 0.2
+diffusionModel(ds2d1).setDiffCoef(diffCoefOmega)
+diffusionModel(ds2d2).setDiffCoef(1.0)
+diffusionModel(ds1d1).setDiffCoef(3.)
+diffusionModel(ds1d2).setDiffCoef(1.)
+if (WITH_AFFINE_GROWTH):
+    m=txtModel(ds2d1,"affineGrowthParam")
+    m.computeMatOnce=1
+    m.computeRhsOnce=1
+    m1d1=txtModel(ds1d1,"affineGrowthParam")
+    m1d1.computeMatOnce=1
+    m1d1.computeRhsOnce=1
+    m1d2=txtModel(ds1d2,"affineGrowthParam")
+    m1d2.computeMatOnce=1
+    m1d2.computeRhsOnce=1
+
+aInter2D1D1=interaction2D1D(aStudy,ds2d1,ds1d1)
+aInter2D1D2=interaction2D1D(aStudy,ds2d2,ds1d2)
+
+aInter1D1D=interaction1D1D(aStudy, ds1d1,ds1d2)
+
+
+
+
+aTS=None
+# select the time algorithm
+if (testNLTS):
+    aTS=implicitNonLinearTimeScheme()
+else:
+    aTS=implicitLinearTimeScheme()
+#simu in t \in [0,1]
+simulator(0,1,aStudy)
+#based on fix time step 0.05
+aTStep=timeDoOneStep(aStudy,aTS,0.05)
+#run the simulation
+aStudy.simulator.doSimu()
+
+
+#for visu, export simulation steps to vtk
+aStudy.simulator.exportSimuToVtk()
+
+#loop on simu to compute mass
+import numpy as np
+for ds in aStudy.system.dynamicalSystems:
+    mass=np.zeros((ds.nbComps),dtype=np.double)
+    aExplorTraj=explorTrajectory(aStudy,aStudy.simuDir)
+    aExplorTraj.rewind()
+    while(aExplorTraj.replay()):
+        computeMass(ds,mass)
+        print("mass "+str(aExplorTraj.curStep)+" = ",end="")
+        for m in mass:
+            print(m,end=", ")
+        print("")
+aStudy.end()
-- 
GitLab


From c67dd6ed2bc851191d29bbc46f9bb4c671f812a6 Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Mon, 14 Oct 2024 10:45:49 +0200
Subject: [PATCH 7/8] option in study to add or not interaciont 1d1d + begin
 creation of class interaction2D2D

---
 trunk/DEMOS/study14.py                    |  6 +++-
 trunk/src/mse/INTERACTIONS/interaction.py | 34 +++++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/trunk/DEMOS/study14.py b/trunk/DEMOS/study14.py
index bae64fb..dafd951 100644
--- a/trunk/DEMOS/study14.py
+++ b/trunk/DEMOS/study14.py
@@ -15,10 +15,13 @@ from os.path import isdir
 
 nbComps=1
 WITH_AFFINE_GROWTH=1
+WITH_INT_1D1D=1
 testNLTS=0
 studName="STUDY14_DIFFUSION"
 if (WITH_AFFINE_GROWTH):
     studName=studName+"_AND_AFFINE_GROWTH"
+if (WITH_INT_1D1D):
+    studName=studName+"_AND_INT_1D1D"
 nbParam=1
 #a study
 aStudy=study(studName, nbParam)
@@ -69,7 +72,8 @@ if (WITH_AFFINE_GROWTH):
 aInter2D1D1=interaction2D1D(aStudy,ds2d1,ds1d1)
 aInter2D1D2=interaction2D1D(aStudy,ds2d2,ds1d2)
 
-aInter1D1D=interaction1D1D(aStudy, ds1d1,ds1d2)
+if (WITH_AFFINE_GROWTH):
+    aInter1D1D=interaction1D1D(aStudy, ds1d1,ds1d2)
 
 
 
diff --git a/trunk/src/mse/INTERACTIONS/interaction.py b/trunk/src/mse/INTERACTIONS/interaction.py
index 3639808..ed5315b 100644
--- a/trunk/src/mse/INTERACTIONS/interaction.py
+++ b/trunk/src/mse/INTERACTIONS/interaction.py
@@ -172,3 +172,37 @@ class interaction1D1D(interaction):
         self.addM1.axpy(1.0,self.dS1D1.massMat)
         self.addM21.addMatMapij(-1.0,self.dS1D2.massMat,self.indexG2ToG1,self.indexG2ToG1,0,1)
         self.addM12.addMatMapij(-1.0,self.dS1D1.massMat,self.indexG1ToG2,self.indexG1ToG2,0,1)
+###
+###
+# CLASS INTERACTION 2D2D
+###
+#class interaction2D2D(interaction):
+#    def __init__(self, aStudy, aDS2d1, aDS2d2, aCompsInvolved=None) -> None:
+#        super().__init__(aStudy,aDS1d1,aDS1d2,aCompsInvolved)
+#        self.dS2D1=aDS2d1
+#        self.dS2D2=aDS2d2
+#        if (self.dS1D1.geoDim != 2 or self.dS1D1.geoDim != 2):
+#            print("ERROR in interaction2D1D, wrong dimension " +str(self.dS2D.aGeoDim)+" "+self.dS1D.aGeoDim)
+#            exit()
+#        # ?
+#        self.c1d2d=1
+#        self.c2d1D=1
+#        #
+#        #TODO: change all
+#        self.indexG1ToG2=np.zeros((self.dS1D1.nbDofsPerComp,),dtype=np.int32)
+#        self.indexG2ToG1=np.zeros((self.dS1D2.nbDofsPerComp,),dtype=np.int32)# dS1D1.nbDof == dS1D2.nbDof
+#        buildMap1DTo2D(self.dS1D1,self.dS1D2,self.indexG1ToG2)
+#        buildMap1DTo2D(self.dS1D2,self.dS1D1,self.indexG2ToG1)
+#        self.addM2=matrix()
+#        self.addM2.setDim(self.dS1D2.nbDofsPerComp,self.dS1D2.nbDofsPerComp)
+#        self.addM1=matrix()
+#        self.addM1.setDim(self.dS1D1.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+#        self.addM21=matrix()
+#        self.addM21.setDim(self.dS1D2.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+#        self.addM12=matrix()
+#        self.addM12.setDim(self.dS1D1.nbDofsPerComp,self.dS1D1.nbDofsPerComp)
+#        self.addM2.axpy(1.0,self.dS1D2.massMat)
+#        self.addM1.axpy(1.0,self.dS1D1.massMat)
+#        self.addM21.addMatMapij(-1.0,self.dS1D2.massMat,self.indexG2ToG1,self.indexG2ToG1,0,1)
+#        self.addM12.addMatMapij(-1.0,self.dS1D1.massMat,self.indexG1ToG2,self.indexG1ToG2,0,1)
+#        # END TODO
-- 
GitLab


From 16d817126f7e4a7dda2fd355e6ac4514d4cd92d2 Mon Sep 17 00:00:00 2001
From: Harry Cousin <harry.cousin@inrae.fr>
Date: Mon, 14 Oct 2024 14:53:31 +0200
Subject: [PATCH 8/8] patch study, add total compute mass

---
 trunk/DEMOS/study14.py | 41 ++++++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/trunk/DEMOS/study14.py b/trunk/DEMOS/study14.py
index dafd951..87abd66 100644
--- a/trunk/DEMOS/study14.py
+++ b/trunk/DEMOS/study14.py
@@ -14,20 +14,19 @@ from os.path import isdir
 
 
 nbComps=1
-WITH_AFFINE_GROWTH=1
+WITH_LOGISTIC=1
 WITH_INT_1D1D=1
-testNLTS=0
+testNLTS=1
 studName="STUDY14_DIFFUSION"
-if (WITH_AFFINE_GROWTH):
-    studName=studName+"_AND_AFFINE_GROWTH"
+if (WITH_LOGISTIC):
+    studName=studName+"_AND_LOGISTIC"
 if (WITH_INT_1D1D):
     studName=studName+"_AND_INT_1D1D"
-nbParam=1
+nbParam=0
 #a study
 aStudy=study(studName, nbParam)
 # the study zone
 aStudy.setGeometry("SIMPLE2",0.4)
-aStudy.setParam([0.5])
 
 # a system
 aSystem=system(aStudy)
@@ -43,8 +42,8 @@ y0=-0.45
 coefInit = 1
 ds2d1.initialState[0]="np.exp(-"+str(coefInit)+"*(x[0]*0.0+(x[1]-"+str(y0)+")**2))"
 ds2d2.initialState[0]="0.0*"+ds2d2.initialState[0]
-ds1d1.initialState[0]="np.exp(-"+str(coefInit)+"*(x[0]*0.0+(x[1]-"+str(y0)+")**2))"
-ds1d2.initialState[0]="0.0*"+ds2d2.initialState[0]
+ds1d1.initialState[0]="0.0*"+ds1d1.initialState[0]
+ds1d2.initialState[0]="0.0*"+ds1d2.initialState[0]
 if (nbComps>1):
     ds2d1.initialState[1]="0+0.0*"+ds2d1.initialState[0]
     ds2d2.initialState[1]="0.0+0.0*"+ds2d1.initialState[0]
@@ -58,21 +57,13 @@ diffusionModel(ds2d1).setDiffCoef(diffCoefOmega)
 diffusionModel(ds2d2).setDiffCoef(1.0)
 diffusionModel(ds1d1).setDiffCoef(3.)
 diffusionModel(ds1d2).setDiffCoef(1.)
-if (WITH_AFFINE_GROWTH):
-    m=txtModel(ds2d1,"affineGrowthParam")
-    m.computeMatOnce=1
-    m.computeRhsOnce=1
-    m1d1=txtModel(ds1d1,"affineGrowthParam")
-    m1d1.computeMatOnce=1
-    m1d1.computeRhsOnce=1
-    m1d2=txtModel(ds1d2,"affineGrowthParam")
-    m1d2.computeMatOnce=1
-    m1d2.computeRhsOnce=1
+if (WITH_LOGISTIC):
+    m2=txtModel(ds2d1,"logistic")
 
 aInter2D1D1=interaction2D1D(aStudy,ds2d1,ds1d1)
 aInter2D1D2=interaction2D1D(aStudy,ds2d2,ds1d2)
 
-if (WITH_AFFINE_GROWTH):
+if (WITH_INT_1D1D):
     aInter1D1D=interaction1D1D(aStudy, ds1d1,ds1d2)
 
 
@@ -107,4 +98,16 @@ for ds in aStudy.system.dynamicalSystems:
         for m in mass:
             print(m,end=", ")
         print("")
+
+mass=np.zeros((ds.nbComps),dtype=np.double)
+aExplorTraj=explorTrajectory(aStudy,aStudy.simuDir)
+aExplorTraj.rewind()
+while(aExplorTraj.replay()):
+    TotalMass=np.zeros((ds.nbComps),dtype=np.double)
+    for ds in aStudy.system.dynamicalSystems:
+        computeMass(ds,mass)
+        TotalMass=TotalMass+mass
+    print("total mass "+str(aExplorTraj.curStep)+" = ",end="")
+    print(TotalMass,end=", ")
+    print("")
 aStudy.end()
-- 
GitLab