Ice Sheet System Model  4.18
Code documentation
Functions
love_core.cpp File Reference

: core of the LOVE numbers solution More...

#include "./cores.h"
#include "../toolkits/toolkits.h"
#include "../classes/classes.h"
#include "../shared/shared.h"
#include "../modules/modules.h"
#include "../solutionsequences/solutionsequences.h"

Go to the source code of this file.

Functions

void love_core (FemModel *femmodel)
 

Detailed Description

: core of the LOVE numbers solution

Definition in file love_core.cpp.

Function Documentation

◆ love_core()

void love_core ( FemModel femmodel)

Definition at line 11 of file love_core.cpp.

11  {
12 
13  Vector<IssmDouble> *wg = NULL;
14  Vector<IssmDouble> *dwdtg = NULL;
15  IssmDouble *x = NULL;
16  IssmDouble *y = NULL;
17 
18  /*love parameters: */
19  IssmDouble *frequencies = NULL;
20  int nfreq,dummy;
21  int sh_nmin,sh_nmax;
22  IssmDouble g0,r0,mu0;
23  bool allow_layer_deletion;
24  bool love_kernels;
25  int forcing_type;
26  bool verbosemod = (int)VerboseModule();
27 
28  /*parameters: */
29  bool save_results;
30 
31  if(VerboseSolution()) _printf0_(" computing LOVE numbers\n");
32 
33  /*Recover some parameters: */
35 
36  /*recover love number parameters: */
38  femmodel->parameters->FindParam(&frequencies,&dummy,LoveFrequenciesEnum); _assert_(nfreq==dummy);
47 
48  /*recover materials parameters: there is only one Matlitho, chase it down the hard way:*/
49  Matlitho* matlitho=NULL;
50  for (int i=femmodel->materials->Size()-1;i>=0;i--){
51  Material* material=xDynamicCast<Material*>(femmodel->materials->GetObjectByOffset(i));
52  if (material->ObjectEnum()==MatlithoEnum)matlitho=xDynamicCast<Matlitho*>(material);
53  }
54  _assert_(matlitho);
55 
56  /*Initialize three love matrices: geoid, vertical and horizontal displacement (real and imaginary parts) */
57  IssmDouble* LoveKr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
58  IssmDouble* LoveHr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
59  IssmDouble* LoveLr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
60  IssmDouble* LoveKi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
61  IssmDouble* LoveHi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
62  IssmDouble* LoveLi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
63 
64  /*Initialize love kernels (real and imaginary parts): */
65  IssmDouble* LoveKernelsReal = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1)*(matlitho->numlayers+1)*6);
66  IssmDouble* LoveKernelsImag = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1)*(matlitho->numlayers+1)*6);
67 
68  /*call the main module: */
69  FourierLoveCorex(LoveKr,LoveKi,LoveHr,LoveHi,LoveLr,LoveLi,LoveKernelsReal,LoveKernelsImag, //output
70  nfreq,frequencies,sh_nmax,sh_nmin,g0,r0,mu0,allow_layer_deletion,forcing_type,verbosemod, //parameter inputs
71  matlitho->numlayers, matlitho->radius, matlitho->viscosity, matlitho->lame_lambda, matlitho->lame_mu,
72  matlitho->burgers_viscosity, matlitho->burgers_mu, matlitho->density, matlitho->isburgers, matlitho->issolid //matlitho inputs
73  );
74 
75  /*Add love matrices to results:*/
82  /*Only when love_kernels is set unity*/
83  if (love_kernels==1) {
84  femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKernelsRealEnum,LoveKernelsReal,(sh_nmax+1)*(matlitho->numlayers+1)*6,nfreq,0,0));
85  femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKernelsImagEnum,LoveKernelsImag,(sh_nmax+1)*(matlitho->numlayers+1)*6,nfreq,0,0));
86  }
87 
88  /*Free ressources:*/
89  xDelete<IssmDouble>(frequencies);
90  xDelete<IssmDouble>(LoveKr);
91  xDelete<IssmDouble>(LoveHr);
92  xDelete<IssmDouble>(LoveLr);
93  xDelete<IssmDouble>(LoveKi);
94  xDelete<IssmDouble>(LoveHi);
95  xDelete<IssmDouble>(LoveLi);
96  xDelete<IssmDouble>(LoveKernelsReal);
97  xDelete<IssmDouble>(LoveKernelsImag);
98 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Matlitho::viscosity
IssmDouble * viscosity
Definition: Matlitho.h:20
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
LoveMu0Enum
@ LoveMu0Enum
Definition: EnumDefinitions.h:236
IssmDouble
double IssmDouble
Definition: types.h:37
LoveHrEnum
@ LoveHrEnum
Definition: EnumDefinitions.h:1148
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
LoveKernelsImagEnum
@ LoveKernelsImagEnum
Definition: EnumDefinitions.h:1149
LoveNfreqEnum
@ LoveNfreqEnum
Definition: EnumDefinitions.h:237
DataSet::AddObject
int AddObject(Object *object)
Definition: DataSet.cpp:252
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
LoveKernelsRealEnum
@ LoveKernelsRealEnum
Definition: EnumDefinitions.h:1150
LoveLiEnum
@ LoveLiEnum
Definition: EnumDefinitions.h:1153
FemModel::results
Results * results
Definition: FemModel.h:48
Matlitho::issolid
IssmDouble * issolid
Definition: Matlitho.h:27
Matlitho::numlayers
int numlayers
Definition: Matlitho.h:18
LoveKernelsEnum
@ LoveKernelsEnum
Definition: EnumDefinitions.h:235
Material
Definition: Material.h:21
VerboseModule
bool VerboseModule(void)
Definition: Verbosity.cpp:23
LoveKiEnum
@ LoveKiEnum
Definition: EnumDefinitions.h:1151
LoveShNmaxEnum
@ LoveShNmaxEnum
Definition: EnumDefinitions.h:239
LoveAllowLayerDeletionEnum
@ LoveAllowLayerDeletionEnum
Definition: EnumDefinitions.h:231
LoveForcingTypeEnum
@ LoveForcingTypeEnum
Definition: EnumDefinitions.h:232
FemModel::materials
Materials * materials
Definition: FemModel.h:45
LoveHiEnum
@ LoveHiEnum
Definition: EnumDefinitions.h:1147
Matlitho::lame_lambda
IssmDouble * lame_lambda
Definition: Matlitho.h:21
LoveKrEnum
@ LoveKrEnum
Definition: EnumDefinitions.h:1152
LoveR0Enum
@ LoveR0Enum
Definition: EnumDefinitions.h:238
Object::ObjectEnum
virtual int ObjectEnum()=0
Matlitho::density
IssmDouble * density
Definition: Matlitho.h:25
Matlitho::isburgers
IssmDouble * isburgers
Definition: Matlitho.h:26
MatlithoEnum
@ MatlithoEnum
Definition: EnumDefinitions.h:1170
GenericExternalResult
Definition: GenericExternalResult.h:21
LoveFrequenciesEnum
@ LoveFrequenciesEnum
Definition: EnumDefinitions.h:233
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
LoveLrEnum
@ LoveLrEnum
Definition: EnumDefinitions.h:1154
Matlitho
Definition: Matlitho.h:14
Matlitho::burgers_viscosity
IssmDouble * burgers_viscosity
Definition: Matlitho.h:23
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Matlitho::radius
IssmDouble * radius
Definition: Matlitho.h:19
Matlitho::lame_mu
IssmDouble * lame_mu
Definition: Matlitho.h:22
LoveG0Enum
@ LoveG0Enum
Definition: EnumDefinitions.h:234
Vector< IssmDouble >
Matlitho::burgers_mu
IssmDouble * burgers_mu
Definition: Matlitho.h:24
LoveShNminEnum
@ LoveShNminEnum
Definition: EnumDefinitions.h:240
FourierLoveCorex
void FourierLoveCorex(IssmDouble *LoveKr, IssmDouble *LoveKi, IssmDouble *LoveHr, IssmDouble *LoveHi, IssmDouble *LoveLr, IssmDouble *LoveLi, IssmDouble *LoveKernelsReal, IssmDouble *LoveKernelsImag, int nfreq, IssmDouble *frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, IssmDouble r0, IssmDouble mu0, bool allow_layer_deletion, int forcing_type, bool verbosemod, int numlayers, IssmDouble *radius, IssmDouble *viscosity, IssmDouble *lame_lambda, IssmDouble *lame_mu, IssmDouble *burgers_viscosity, IssmDouble *burgers_mu, IssmDouble *density, IssmDouble *isburgers, IssmDouble *issolid)
Definition: FourierLoveCorex.cpp:21
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16