Changeset 17307


Ignore:
Timestamp:
02/19/14 13:30:46 (11 years ago)
Author:
jbondzio
Message:

BUG: removing error messages

Location:
issm/trunk-jpl/src/c/analyses
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp

    r17305 r17307  
    66
    77/*Model processing*/
    8 int  LsfReinitializationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){
    9         _error_("not implemented yet");
    10 }
    11 void LsfReinitializationAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){
    12         _error_("not implemented yet");
    13 }
    14 void LsfReinitializationAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){
    15         _error_("not implemented yet");
    16 }
    17 void LsfReinitializationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){
    18         _error_("not implemented yet");
    19 }
    20 void LsfReinitializationAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){
    21         _error_("not implemented yet");
    22 }
    23 void LsfReinitializationAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){
    24         _error_("not implemented yet");
    25 }
     8int  LsfReinitializationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
     9        return 1;
     10}/*}}}*/
     11void LsfReinitializationAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
     12        /* Do nothing for now */
     13}/*}}}*/
     14void LsfReinitializationAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     15        /* Do nothing for now */
     16}/*}}}*/
     17void LsfReinitializationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
     18        /* Do nothing for now */
     19}/*}}}*/
     20void LsfReinitializationAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
     21        /* Do nothing for now */
     22}/*}}}*/
     23void LsfReinitializationAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
     24        /* Do nothing for now */
     25}/*}}}*/
    2626
    2727/*Finite element Analysis*/
    28 void           LsfReinitializationAnalysis::Core(FemModel* femmodel){
     28void           LsfReinitializationAnalysis::Core(FemModel* femmodel){/*{{{*/
    2929        _error_("not implemented yet");
    30 }
    31 ElementVector* LsfReinitializationAnalysis::CreateDVector(Element* element){
     30}/*}}}*/
     31ElementVector* LsfReinitializationAnalysis::CreateDVector(Element* element){/*{{{*/
    3232        _error_("not implemented yet");
    33 }
    34 ElementMatrix* LsfReinitializationAnalysis::CreateJacobianMatrix(Element* element){
     33}/*}}}*/
     34ElementMatrix* LsfReinitializationAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
    3535        _error_("not implemented yet");
    36 }
    37 ElementMatrix* LsfReinitializationAnalysis::CreateKMatrix(Element* element){
     36}/*}}}*/
     37ElementMatrix* LsfReinitializationAnalysis::CreateKMatrix(Element* element){/*{{{*/
    3838        _error_("not implemented yet");
    39 }
    40 ElementVector* LsfReinitializationAnalysis::CreatePVector(Element* element){
     39}/*}}}*/
     40ElementVector* LsfReinitializationAnalysis::CreatePVector(Element* element){/*{{{*/
    4141        _error_("not implemented yet");
    42 }
    43 void LsfReinitializationAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){
     42}/*}}}*/
     43void LsfReinitializationAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
    4444        _error_("not implemented yet");
    45 }
    46 void LsfReinitializationAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){
     45}/*}}}*/
     46void LsfReinitializationAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    4747        _error_("not implemented yet");
    48 }
    49 void LsfReinitializationAnalysis::UpdateConstraints(FemModel* femmodel){
     48}/*}}}*/
     49void LsfReinitializationAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
    5050        _error_("not implemented yet");
    51 }
     51}/*}}}*/
    5252
     53/* Other */
     54void LsfReinitializationAnalysis::SetDistanceOnIntersectedElements(FemModel* femmodel){/*{{{*/
     55
     56        /* Intermediaries */
     57        int i;
     58
     59        /*Initialize vector with number of vertices*/
     60        int numvertices=femmodel->vertices->NumberOfVertices();
     61        Vector<IssmDouble>* vec_dist_zerolevelset=new Vector<IssmDouble>(numvertices); //vertices that have ice at next time step
     62
     63        /*TODO: Fill vector with values of old level set function: */
     64        for(i=0;i<numvertices;i++){
     65                vec_dist_zerolevelset->SetValue(i,0.,INS_VAL);
     66        }
     67        for(i=0;i<femmodel->elements->Size();i++){
     68                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
     69                if(element->IsZeroLevelset(MaskIceLevelsetEnum))
     70                        SetDistanceToZeroLevelsetElement(vec_dist_zerolevelset, element);
     71        }
     72
     73        /*Assemble vector and serialize */
     74        vec_dist_zerolevelset->Assemble();
     75        IssmDouble* dist_zerolevelset=vec_dist_zerolevelset->ToMPISerial();
     76        InputUpdateFromVectorx(femmodel,dist_zerolevelset,MaskIceLevelsetEnum,VertexSIdEnum);
     77
     78        /*Clean up and return*/
     79        delete vec_dist_zerolevelset;
     80        delete dist_zerolevelset;
     81}/*}}}*/
     82void LsfReinitializationAnalysis::SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element){/*{{{*/
     83
     84        if(!element->IsZeroLevelset(MaskIceLevelsetEnum))
     85                return;
     86
     87        /* Intermediaries */
     88        const int dim=3;
     89        int i,d;
     90        int numvertices=element->GetNumberOfVertices();
     91        IssmDouble s0[dim], s1[dim], v[dim];
     92        IssmDouble dist,lsf_old;
     93
     94        IssmDouble* lsf = xNew<IssmDouble>(numvertices);
     95        IssmDouble* sign_lsf = xNew<IssmDouble>(numvertices);
     96        IssmDouble* signed_dist = xNew<IssmDouble>(numvertices);
     97        IssmDouble* xyz_list = NULL;
     98        IssmDouble* xyz_list_zero = NULL;
     99
     100        /* retrieve inputs and parameters */
     101        element->GetVerticesCoordinates(&xyz_list);
     102        element->GetInputListOnVertices(lsf,MaskIceLevelsetEnum);
     103
     104        /* get sign of levelset function */
     105        for(i=0;i<numvertices;i++){
     106                if(lsf[i]==0.)
     107                        sign_lsf[i]=1.;
     108                else
     109                        sign_lsf[i]=lsf[i]/fabs(lsf[i]);
     110        }
     111
     112        element->ZeroLevelsetCoordinates(&xyz_list_zero, xyz_list, MaskIceLevelsetEnum);
     113        for(d=0;d<dim;d++){
     114                s0[d]=xyz_list_zero[0+d];
     115                s1[d]=xyz_list_zero[3+d];
     116        }
     117
     118        /* get signed_distance of vertices to zero levelset straight */
     119        for(i=0;i<numvertices;i++){
     120                for(d=0;d<dim;d++)
     121                        v[d]=xyz_list[3*i+d];
     122                dist=GetDistanceToStraight(&v[0],&s0[0],&s1[0]);
     123                signed_dist[i]=sign_lsf[i]*dist;
     124        }
     125       
     126        /* insert signed_distance into vec_signed_dist, if computed distance is smaller */
     127        for(i=0;i<numvertices;i++){
     128                vec_signed_dist->GetValue(&lsf_old, element->vertices[i]->Sid());
     129                if(fabs(signed_dist[i])<fabs(lsf_old))
     130                        vec_signed_dist->SetValue(element->vertices[i]->Sid(),signed_dist[i],INS_VAL);
     131        }
     132
     133        xDelete<IssmDouble>(lsf);
     134        xDelete<IssmDouble>(sign_lsf);
     135        xDelete<IssmDouble>(signed_dist);
     136}/*}}}*/
     137IssmDouble LsfReinitializationAnalysis::GetDistanceToStraight(IssmDouble* q, IssmDouble* s0, IssmDouble* s1){/*{{{*/
     138        // returns distance d of point q to straight going through points s0, s1
     139        // d=|a x b|/|b|
     140        // with a=q-s0, b=s1-s0
     141       
     142        /* Intermediaries */
     143        const int dim=2;
     144        int i;
     145        IssmDouble a[dim], b[dim];
     146        IssmDouble norm_b;
     147
     148        for(i=0;i<dim;i++){
     149                a[i]=q[i]-s0[i];
     150                b[i]=s1[i]-s0[i];
     151        }
     152       
     153        norm_b=0.;
     154        for(i=0;i<dim;i++)
     155                norm_b+=b[i]*b[i];
     156        norm_b=sqrt(norm_b);
     157        _assert_(norm_b>0.);
     158
     159        return fabs(a[0]*b[1]-a[1]*b[0])/norm_b;
     160}/*}}}*/
     161
  • issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.h

    r17305 r17307  
    2929        void InputUpdateFromSolution(IssmDouble* solution,Element* element);
    3030        void UpdateConstraints(FemModel* femmodel);
     31       
     32        /* Other */
     33        void SetDistanceOnIntersectedElements(FemModel* femmodel);
     34        void SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_dist, Element* element);
     35        IssmDouble GetDistanceToStraight(IssmDouble* q, IssmDouble* s0, IssmDouble* s1);
    3136};
    3237#endif
Note: See TracChangeset for help on using the changeset viewer.