From 9caff39803ddbabf9433565cdcd92fb1487861dc Mon Sep 17 00:00:00 2001 From: cfdem Date: Mon, 7 Jan 2013 19:24:25 +0100 Subject: [PATCH] release on 2013-01-07_19-24-25 --- README | 82 ------ doc/CFDEMcoupling_Manual.pdf | Bin 515179 -> 515794 bytes doc/CFDEMcoupling_Manual.txt | 2 + doc/githubAccess_public.html | 6 + doc/githubAccess_public.pdf | Bin 361862 -> 362471 bytes doc/githubAccess_public.txt | 6 + src/lagrangian/cfdemParticle/Make/files | 20 +- .../cfdemParticle/cfdTools/versionInfo.H | 2 +- .../cfdemParticle/cfdemCloud/cfdemCloud.C | 26 +- .../cfdemParticle/cfdemCloud/cfdemCloud.H | 2 + src/lagrangian/cfdemParticle/etc/bashrc | 3 + src/lagrangian/cfdemParticle/etc/functions.sh | 2 + .../subModels/IOModel/basicIO/basicIO.C | 35 ++- .../subModels/IOModel/basicIO/basicIO.H | 3 + .../dataExchangeModel/dataExchangeModel.C | 2 +- .../dataExchangeModel/dataExchangeModel.H | 1 + .../noDataExchange/noDataExchange.H | 1 + .../dataExchangeModel/oneWayVTK/oneWayVTK.H | 1 + .../twoWayFiles/twoWayFiles.H | 2 + .../twoWayM2M/library/libcouple.a | Bin 4209202 -> 4209202 bytes .../dataExchangeModel/twoWayM2M/twoWayM2M.C | 248 ++++++++---------- .../dataExchangeModel/twoWayM2M/twoWayM2M.H | 11 + .../dataExchangeModel/twoWayMPI/twoWayMPI.H | 2 + .../twoSpheresGlowinskiMPI/parCFDDEMrun.sh | 2 +- .../CFD/constant/couplingProperties | 6 +- .../ErgunTestMPI/parCFDDEMrun.sh | 4 +- .../ErgunTestMPI_restart/DEM/post/dummy | 1 + .../ErgunTestMPI_restart/parCFDDEMrun.sh | 2 +- .../settlingTestMPI/parCFDDEMrun.sh | 2 +- .../packedBedTemp/parCFDDEMrun.sh | 2 +- 30 files changed, 230 insertions(+), 246 deletions(-) delete mode 100644 README diff --git a/README b/README deleted file mode 100644 index a677e0a8..00000000 --- a/README +++ /dev/null @@ -1,82 +0,0 @@ -/*---------------------------------------------------------------------------*\ - CFDEMcoupling - Open Source CFD-DEM coupling - - CFDEMcoupling is part of the CFDEMproject - www.cfdem.com - Christoph Goniva, christoph.goniva@cfdem.com - Copyright 2009-2012 JKU Linz - Copyright 2012- DCS Computing GmbH, Linz -------------------------------------------------------------------------------- -License - This file is part of CFDEMcoupling. - - CFDEMcoupling is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 3 of the License, or (at your - option) any later version. - - CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with CFDEMcoupling; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS - and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER). -\*---------------------------------------------------------------------------*/ - - -CFDEM coupling provides an open source parallel coupled CFD-DEM framework -combining the strengths of LIGGGHTS DEM code and the Open Source -CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand -standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM -code LIGGGHTS. In this toolbox the particle representation within the -CFD solver is organized by "cloud" classes. Key functionalities are organised -in sub-models (e.g. force models, data exchange models, etc.) which can easily -be selected and combined by dictionary settings. - -The coupled solvers run fully parallel on distributed-memory clusters. - -Features are: - -- its modular approach allows users to easily implement new models -- its MPI parallelization enables to use it for large scale problems -- the "forum"_lws on CFD-DEM gives the possibility to exchange with other - users / developers -- the use of GIT allows to easily update to the latest version -- basic documentation is provided - -The file structure: - -- "src" directory including the source files of the coupling toolbox and models -- "applications" directory including the solver files for coupled CFD-DEM simulations -- "doc" directory including the documentation of CFDEMcoupling -- "tutorials" directory including basic tutorial cases showing the functionality - - - -Details on installation are given on the "www.cfdem.com" - -The functionality of this CFD-DEM framwork is described via "tutorial cases" showing -how to use different solvers and models. - -CFDEMcoupling stands for Computational Fluid Dynamics (CFD) - -Discrete Element Method (DEM) coupling. - -CFDEMcoupling is an open-source code, distributed freely under the terms of the -GNU Public License (GPL). - -Core development of CFDEMcoupling is done by -Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012 - - -\*---------------------------------------------------------------------------*/ -(*) "OpenFOAM(R)"_of is a registered trade mark of Silicon Graphics -International Corp. This offering is not affiliated, approved or endorsed by -Silicon Graphics International Corp., the producer of the OpenFOAM(R) software -and owner of the OpenFOAM(R) trademark. -\*---------------------------------------------------------------------------*/ diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf index 6c8d547bcf1cd510803161632183cf08a2afdb92..671a2cce9860aec55bd17e4c290f3da54c30db96 100644 GIT binary patch delta 19181 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 E0F}0>u>b%7 delta 18692 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 diff --git a/doc/CFDEMcoupling_Manual.txt b/doc/CFDEMcoupling_Manual.txt index 399ae67f..6c8df26f 100644 --- a/doc/CFDEMcoupling_Manual.txt +++ b/doc/CFDEMcoupling_Manual.txt @@ -433,6 +433,8 @@ Reasonable example settings for the "liggghtsCommands" dictionary are given in t + + diff --git a/doc/githubAccess_public.html b/doc/githubAccess_public.html index c8e5a91c..70c81f99 100644 --- a/doc/githubAccess_public.html +++ b/doc/githubAccess_public.html @@ -166,4 +166,10 @@ CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION

(see http://stackoverflow.com/questions/3777075/https-github-access)

+

c) If you face the error: "Agent admitted failure to sign using the key. Permission denied (publickey).", after ssh -T git@github.com +

+

please type: "ssh-add" +

+

(see: https://help.github.com/articles/error-agent-admitted-failure-to-sign) +

diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf index 65743b855497bdb4fe1a5502cc1a4c8b82db5e00..cbd54c63668ab285a33b18f6adf6ae2211853657 100644 GIT binary patch delta 2245 zcmah}YdF+-8*YqQ88KmMD`d!V$(&DCY&Gl{dW*D8gp4tcLl~l%e+q4K7&**Vl5wgW zMj?kx$uX32C`1}L^Ny&Lb>8XiefQd{KD^JD-+kTBb3f00-5-9jm$ptMZRN!%U{Pok z5lzP6Fz6^=3=b5;lZoMhV|cRncn~c%2+uENL$qb^xXR~j2yzn`izV|xry;7qY(PI1 zzLHrx?EC^off9IduiS2Dnspm~cXi{;Z50(q3Et0L^zO7q;`-Y7%nsV?(Rc8RbMB|a zlBc5ZHSUW%rM3IG$tJ+gu-mS##guC?o( zd@9T9OH(Rw(d@4~U)3-O2rdhz^lmB_+S{x(n&O9E*i|T3kCoc0iI`OPLRAh7+3Daj zKAcwec;&PI(&I3AyM;Juc6?Uvl-BHE5u9}NU(dk_vK0ErGqmtwUJR3vj^SI;ugKz* z(n0>m{j4W0bEYHi{`hPeTEG3Iu8JMqUa1It)#genDB(A4*Lp7SQ$Syim4YUk+JDO! zyrGTbZJm2Zsr6UyiUWs@?PO@H%sAJTdQW<-tx8itwyK_-_PWACcYTS)9X1=*7MDHV z1#)REn(OHycMN~_QpXY79j)(~u=GnP~ z$_gSqs8<#fj*e@ChMw^e#HaEIXyP19N*;5rq#bWA-;?eZ;)#{aPLKowm`t#GP z^CKk6q>F29(mQAL>zoP3hPFu64-X3vSr&hl-DjS=E|J;-RU&?W=3Oz}$fpqqyL%wE)}d~}ZIgS9NX zib1s>28kBW;AN_{0AFQy+#}5!F5B24n{Hp<{z^xUy^~rkLHWONcx`>BbDt1Co}2~O zs@_}EOK<_0rrZ;S))-7mQUJDIhp;aXAv(f67>w~4mKOb!z_RQ2bk3OutYZ<8H;jFGHmsp9Rs!{O;|ak$-Zw!4exX9$hF~ z{6xCC>qTJlqF2O^2ZVY#PrM=mHwuIq!x80X_L@m*+Cq0hU0>oVc=-MClcK|s`bYOb z1f2k+btPG-|4Sf%UB_Jqw~kK#yQIhAP13{V9TPvaA2ah!`y)>T?b;r6BvqQ2Y&~ z6MbH%UMY9cbi=yqCJhYWO^ib}m#o9e}9wr`QlJ89bi9 z$sa=EpALsWWpM}$iSNvT7)ZZfu0LcKfWeayU(4J)m=omT#)gK0*oU6@G@v$%mW|Ro z&Ifli+_tk#3}jQiui}mj*dVG(8AdJXMy(gtBFEJC!Q9+l4Q^+}u3l8h5~$EkhLWQu zv++p=`ESE~D?s-7Je^0+qn?!N&Mn0q9@5@fUX&rb{&UNgry0I>M|#TuaxDekaqcbd z&WO8&dDdxGu2MTU?ewFB4>Nxz#7t2=9;i5)Y8T_T9!Zcy@}^Q3O06bnQ=PO?#h`+z zq>t7asjqgcFya}6McD(J`{z~a;qhzXqhp8fY7|vd-?oM*v((F{)ymiDwSFHAH@^mV zH1vKhw~%CB%D7>EsbQG~ESOqSv2kU_iWc(ErZ|RS^IKOzRtxUk9{$Y##vw%k3?C?- zfIuOnz|0J}KOn@PgFqv#yn}){2s}~Rut(au{f*7d|EKxV`l>nP7UUrn{b!3k(!rbK z=V9RK&Eb0j5Hg6w7XXk$AOimb07(XsE2GasvcUivi$HxTgg*lM<;CLhWFq=oj(|qv zzvHmD?>HhBi~4qsi2q(oB9Ok`1^#iEL?V*E5fe}t^0#IPC>%~2)0g_&Gyz2v3OlIKF9t@(p8y08&|0kTy&7r{@w;)bfkOvEjm8OY9L3MR44_ZP00#)nN;{X5v delta 1776 zcmai!dpOi-8^?2)T{|yQDLIcrMTOrSe?yv14w;c0R!XQb49b`=6*>GGnR19QJ4VaS z#)vf4HaTrJ^BSV0B2A4`p=4gnh>G!6*s;6sb?vqOc<+Cn@AJJr_kCZ_^T$_qY2Eqk zb$P6Rp^zv54LD+uNE9=Vm8ZtaQ)lIAu<|r(^I#SdUq%eeW3Ua_0+xyv2+d8R~aLP)hB6a*1MQJ^YYivD)F?8hp+mXTG00V zG`rv1-?eb`c%b5;9PS+4kfiI_-zbvGvUS_#Vs3XzmEYK-3M)UutA6nPm6%)mVWU`P{5({kxj>}%TSUiGLdM^a;qw|FtF>`Ui7-j z2e0wv3RC3Y#JhekeSM-<^2wM1f1~{Hvx2zQPIm7c*Iph$3x6>dmzyoj3e6a_zzo=No%<)QCwx z>gNXTS~+FudNtHOx%o7rBw|l#HLb)DwZbd@BX~x)>TUOI@&VNe0(-vw! z#YH72S8!1F&9ZyNrvF~JzsI>!xD%KPmKqsoJ@ag~G2smkG`{lL zzPfJ@{l2kQfWw({WGmWl;D-jfXwY_D#N^jhVvWrTC^@N=<6}`?M-5{~b5hGCPjzWZ zXkY73n#MQ73PR1l%R*Y$M=JZ;1fHx*(O8c_>W56(K0stu)LsHU&J@*k+-UaJ@2vPz zR{NqVza+Nh_{!%QC!12)+2{@f!S`&&5NkChYc+9r_xv`3*Y&mgy$5ws`pUI$2O4|n z9kZ`0>%nT_g`scoNfoPJrp`zeWV2KrG_d3GsJSV3$K^Ew^F-cV3zKZUYIALmn;cR3 z^UsSdEjr{2MVPh~t}{Eei=&_RN}?{-@{WR2cc(cy6w^_2=QEpf_M*YFxeZ;f`V^;M zGo1M14THLG#j!nW65@sTc$y^bllpf|_D`PcW#B~cjob%%Tw*g1Wo`YZm3dVBQecLDq@GIwc8PEzBjeMk*a z?wgzTsp#A=UtNy(J6NW-c)M&qd-z0;p=egYqJ3MfxZZobmTudHH%Xk0FnGhuVe&sL zaDU+~Itz4^1?(I@!<)i`(14@R+c_GEk-Hp~v7@4A+whTW^m= z00>_PPjWm1f&D`h2>&CNt}4{o*}~zgA@$m{}aIk0z95Uj$* liggghtsCommand_; // Private member functions + inline void free2D(double**); + virtual void getDEMdata(); virtual void giveDEMdata(); diff --git a/src/lagrangian/cfdemParticle/etc/bashrc b/src/lagrangian/cfdemParticle/etc/bashrc index e5fd1c8b..6ef0466b 100755 --- a/src/lagrangian/cfdemParticle/etc/bashrc +++ b/src/lagrangian/cfdemParticle/etc/bashrc @@ -107,6 +107,9 @@ alias cfdemCompM2M='bash $CFDEM_SRC_DIR/etc/compileM2Mlib.sh' #- shortcut to test basic tutorials alias cfdemTestTUT='bash $CFDEM_SRC_DIR/etc/testTutorials.sh' +#- recursive touch of current directory +alias touchRec='find ./* -exec touch {} \;' + #- shortcut to run liggghts in serial cfdemLiggghts() { $CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME < $1; } export -f cfdemLiggghts diff --git a/src/lagrangian/cfdemParticle/etc/functions.sh b/src/lagrangian/cfdemParticle/etc/functions.sh index 57df6e6b..dd9563fb 100755 --- a/src/lagrangian/cfdemParticle/etc/functions.sh +++ b/src/lagrangian/cfdemParticle/etc/functions.sh @@ -313,6 +313,8 @@ parCFDDEMrun() if [ $debugMode == "on" ]; then debugMode="valgrind" + elif [ $debugMode == "strict" ]; then + debugMode="valgrind --leak-check=full -v --trace-children=yes --track-origins=yes" else debugMode="" fi diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C index 82805a0b..ead3bd54 100644 --- a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C +++ b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C @@ -62,13 +62,16 @@ basicIO::basicIO : IOModel(dict,sm), //propsDict_(dict.subDict(typeName + "Props")), - dirName_("particles"), + dirName_("lagrangian"), path_("dev/null"), + m2mComm_(false), lagPath_("dev/null") { + if (particleCloud_.dataExchangeM().myType()=="twoWayM2M"){m2mComm_=true;} //typeName did not work + Info << "particleCloud_.dataExchangeM().typeName=" << particleCloud_.dataExchangeM().myType() << endl; + //if (propsDict_.found("dirName")) dirName_=word(propsDict_.lookup("dirName")); path_ = buildFilePath(dirName_); - } @@ -87,9 +90,13 @@ void basicIO::dumpDEMdata() const if (time_.outputTime()) { // make time directory - lagPath_=createTimeDir(path_); - lagPath_=createTimeDir(fileName(lagPath_/"lagrangian")); - + if (m2mComm_) lagPath_=buildFilePath(dirName_); + else + { + lagPath_=createTimeDir(path_); + lagPath_=createTimeDir(fileName(lagPath_/"lagrangian")); + } + // stream data to file streamDataToPath(lagPath_, particleCloud_.positions(), particleCloud_.numberOfParticles(), "positions","vector","Cloud","0"); streamDataToPath(lagPath_, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "v","vector","vectorField",""); @@ -102,11 +109,19 @@ void basicIO::dumpDEMdata() const fileName basicIO::buildFilePath(word dirName) const { // create file structure - fileName path("."/dirName); - mkDir(path,0777); - mkDir(fileName(path/"constant"),0777); - OFstream* stubFile = new OFstream(fileName(path/"particles.foam")); - delete stubFile; + fileName path(""); + if(m2mComm_) + { + path=fileName(particleCloud_.mesh().time().path()/particleCloud_.mesh().time().timeName()/dirName/"particleCloud"); + mkDir(path,0777); + } else + { + path=fileName("."/dirName); + mkDir(path,0777); + mkDir(fileName(path/"constant"),0777); + OFstream* stubFile = new OFstream(fileName(path/"particles.foam")); + delete stubFile; + } return path; } diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.H b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.H index 41fadcd6..f5f3d0c9 100644 --- a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.H +++ b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.H @@ -40,6 +40,7 @@ SourceFiles #define basicIO_H #include "IOModel.H" +#include "dataExchangeModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -63,6 +64,8 @@ private: fileName path_; + bool m2mComm_; + // Member Functions fileName buildFilePath(word) const; diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C index 62f44e4f..4346715e 100755 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C @@ -135,7 +135,7 @@ void Foam::dataExchangeModel::allocateArray int length ) const { - // allocate and init double array + // allocate and init int array array = new int[length]; for (int i=0; i$e!$%;XD0gFgr3Cmc) zsvLBa-ydPSBZjRM(om7X8rHFaO*w33Z#$#8-u+x!G-_MWu#Fw;Vh{VWQOo5Y!@Em@ zrE!2m9N`#woXEakxOpCR21C1^E?n;vXE0#GLJ_ufJ?G5|BBuWLqbZT?I4I#97bxQr LS2EkFBp!YN@^_-p delta 410 zcmX}nJ5Rz;9ES0L3iYn2P>PpYZ}ox{Y%M6tz;|F{(~n`%#giBYC)u2t3Fag;QNB$F zVnU3w`WTDDZ#c=5|H<3=yp4A7n2Fm?!OGjEJLAQORJ8EvwEBUW5)CbaD8?|33B(YW z4Na+C{pXgiB;|*vxaHX2L6P$nOkxVtn87UOWX_*|{tm+yp(+Nw1uPP||#{mv; zge;C_KgeA_g=MM5;FPF(7V;?I1U4L;!j)C8`09*yz6EAl=-nbpIKw&0xWJ{memory->destroy(tmpI_); + lmp->memory->destroy(tmp_); + delete lmp2foam_; + delete lmp2foam_vec_; + delete foam2lmp_vec_; + delete lmp; } @@ -191,21 +196,14 @@ void twoWayM2M::getData { double **tata_ = (double **) lammps_extract_atom(lmp,charName); lmp2foam_vec_->exchange(&(tata_[0][0]), &(field[0][0])); - //for (int i = 0; i < nlocal_foam_; i++) - // Pout << "hihi getData: " << name <<"=" << field[i][0]<<","<0){ - tmp_ = (double *) lammps_extract_atom(lmp,charName); - /*}else{ - // might use the fct from dataExchangeModel mother class - tmp_=new double[1]; - tmp_[0]=0; - }*/ + //tmp_ = (double *) lammps_extract_atom(lmp,charName); // funct nicht? + double *tmp_ = (double *) lammps_extract_atom(lmp,charName); + //if(nlocal_lammps_>0) + // for (int i = 0; i < nlocal_lammps_; i++) + // Pout << couplingStep_ << "st tmp_[" << i << "]=" << tmp_[i] << " - "<exchange(tmp_, &(field[0][0])); - //for (int i = 0; i < nlocal_foam_; i++) - // Pout << name <<"[0][i]=" << field[0][i] <memory->grow(array, len, width, "m2m:data"); + for (int i = 0; i < len; i++) + for (int j = 0; j < width; j++) + array[i][j] = initVal; } void Foam::twoWayM2M::allocateArray @@ -275,7 +278,11 @@ void Foam::twoWayM2M::allocateArray const char* length ) const { - allocate_external_double(array, width,max(particleCloud_.numberOfParticles(),1),initVal,lmp); + int len = max(particleCloud_.numberOfParticles(),1); + lmp->memory->grow(array, len, width, "m2m:data"); + for (int i = 0; i < len; i++) + for (int j = 0; j < width; j++) + array[i][j] = initVal; } //============ @@ -288,8 +295,11 @@ void Foam::twoWayM2M::allocateArray int length ) const { - //if(length==-1) then LIGGGHTS uses own length data - allocate_external_int(array, width,max(length,1),initVal,lmp); + int len = max(length,1); + lmp->memory->grow(array, len, width, "m2m:data"); + for (int i = 0; i < len; i++) + for (int j = 0; j < width; j++) + array[i][j] = initVal; } void Foam::twoWayM2M::allocateArray @@ -300,9 +310,32 @@ void Foam::twoWayM2M::allocateArray const char* length ) const { - allocate_external_int(array, width,max(particleCloud_.numberOfParticles(),1),initVal,lmp); + int len = max(particleCloud_.numberOfParticles(),1); + lmp->memory->grow(array, len, width, "m2m:data"); + for (int i = 0; i < len; i++) + for (int j = 0; j < width; j++) + array[i][j] = initVal; } //============ +// double * +void Foam::twoWayM2M::allocateArray(double*& array, double initVal, int length) const +{ + int len = max(length,1); + lmp->memory->grow(array, len, "m2m:data"); + for (int i = 0; i < len; i++) + array[i] = initVal; +} +//============== +// int * +void Foam::twoWayM2M::allocateArray(int*& array, int initVal, int length) const +{ + int len = max(length,1); + lmp->memory->grow(array, len, "m2m:data"); + for (int i = 0; i < len; i++) + array[i] = initVal; +} +//============== + bool Foam::twoWayM2M::couple() const { @@ -381,48 +414,29 @@ void Foam::twoWayM2M::syncIDs() const // get data from lammps nlocal_lammps_ = *((int *) lammps_extract_global(lmp,"nlocal")); - int* id_lammps_sync; - double** pos_lammps_sync; + int* id_lammps_sync=NULL; + double** pos_lammps_sync=NULL; if(firstRun_) { // IDs for vectors - if(nlocal_lammps_>0){ - id_lammps_ = (int *) lammps_extract_atom(lmp,"id"); - }else{ - // might use the fct from dataExchangeModel mother class - id_lammps_=new int[1]; - id_lammps_[0]=0; - } + id_lammps_ = (int *) lammps_extract_atom(lmp,"id"); - //delete [] id_lammps_vec_; - Foam::dataExchangeModel::allocateArray(id_lammps_vec_,0,nlocal_lammps_*3); + allocateArray(id_lammps_vec_,0,nlocal_lammps_*3); for (int i = 0; i < nlocal_lammps_; i++) for (int j=0;j<3;j++) id_lammps_vec_[i*3+j] = id_lammps_[i]*3+j; - Foam::dataExchangeModel::allocateArray(pos_lammps_,-1.,3,nlocal_lammps_); // do I need this??? - if(nlocal_lammps_>0){ - pos_lammps_ = (double **) lammps_extract_atom(lmp,"x"); - }else{ - // might use the fct from dataExchangeModel mother class - pos_lammps_ = new double*[1]; - pos_lammps_[0] = new double [1]; - pos_lammps_[0][0] = 0; - } + pos_lammps_ = (double **) lammps_extract_atom(lmp,"x"); } else { - // re-arrange data using map - //Foam::dataExchangeModel::allocateArray(id_lammps_sync,-1.,nlocal_lammps_); // probably not necessary - if(nlocal_lammps_>0){ - id_lammps_sync = (int *) lammps_extract_atom(lmp,"id"); - }else{ - // might use the fct from dataExchangeModel mother class - id_lammps_sync=new int[1]; - id_lammps_sync[0]=10; - } - //extract_save(id_lammps_sync,"id"); // in future it should look like this!!! - Foam::dataExchangeModel::allocateArray(id_lammps_vec_,0,nlocal_lammps_*3); + // re-arrange data using map + + // make a copy of id array + id_lammps_sync = (int *) lammps_extract_atom(lmp,"id"); + + // genereate vector IDs + allocateArray(id_lammps_vec_,0,nlocal_lammps_*3); for (int i = 0; i < nlocal_lammps_; i++) for (int j=0;j<3;j++) id_lammps_vec_[i*3+j] = id_lammps_sync[i]*3+j; @@ -433,31 +447,18 @@ void Foam::twoWayM2M::syncIDs() const foam2lmp_vec_->setup(nlocal_foam_*3,id_foam_vec_,nlocal_lammps_*3,id_lammps_vec_); // map data according to last TS - Foam::dataExchangeModel::allocateArray(id_lammps_,0,nlocal_foam_); - lmp2foam_->exchange(id_lammps_sync, id_lammps_); + allocateArray(tmpI_,-1.,nlocal_foam_); + lmp2foam_->exchange(id_lammps_sync, tmpI_); + for(int i=0;i0){ - pos_lammps_sync = (double **) lammps_extract_atom(lmp,"x"); - }else{ - // might use the fct from dataExchangeModel mother class - pos_lammps_sync = new double*[1]; - pos_lammps_sync[0] = new double [3]; - pos_lammps_sync[0][0] = 0; - pos_lammps_sync[0][1] = 0; - pos_lammps_sync[0][2] = 0; - } - // find better solution here!!! - //Foam::dataExchangeModel::allocateArray(pos_lammps_,-1.,3,nlocal_foam_); - //lmp2foam_vec_->exchange(&(pos_lammps_sync[0][0]), &(pos_lammps_[0][0])); - double** gugu; - Foam::dataExchangeModel::allocateArray(gugu,-1.,3*nlocal_foam_,1); - Foam::dataExchangeModel::allocateArray(pos_lammps_,-1.,3,nlocal_foam_); - lmp2foam_vec_->exchange(&(pos_lammps_sync[0][0]), &(gugu[0][0])); - - // conversion of array (should not be necessary if above problem is solved) - for (int i = 0; i < nlocal_foam_; i++) - for (int j = 0; j < 3; j++) - pos_lammps_[i][j]=gugu[0][i*3+j]; + // get access to "x" + pos_lammps_sync = (double **) lammps_extract_atom(lmp,"x"); + allocateArray(tmp_,-1.,nlocal_foam_*3); + lmp2foam_vec_->exchange(pos_lammps_sync[0], tmp_); + for(int i=0;i0) + for (int i = 0; i < nlocal_foam_; i++) + Pout << couplingStep_ << "st pos:" <<"=" << pos_lammps_[i][0]<<","<