Commit a0e5d149 authored by julient31's avatar julient31
Browse files

Commit JT 040119

- corrected tangent vector projection
- output verbose (Gradidottan)
parent 44fe8330
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -15,6 +15,10 @@
   Contributing authors: Julien Tranchida (SNL)

   Please cite the related publication:
   Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). 
   Method for finding mechanism and activation energy of magnetic transitions, 
   applied to skyrmion and antivortex annihilation. 
   Computer Physics Communications, 196, 335-347.
------------------------------------------------------------------------- */

#include <mpi.h>
@@ -467,6 +471,15 @@ void FixNEB_spin::min_post_force(int /*vflag*/)
          }
        }

        // project tangent vector on tangent space
	
	double sdottan;
	sdottan = sp[i][0]*tangent[i][0] + sp[i][1]*tangent[i][1] +
	  sp[i][2]*tangent[i][2];
	tangent[i][0] -= sdottan*sp[i][0];
	tangent[i][1] -= sdottan*sp[i][1];
	tangent[i][2] -= sdottan*sp[i][2];
	
	// calc. next geodesic length
	
	spi[0]=sp[i][0];
@@ -518,7 +531,8 @@ void FixNEB_spin::min_post_force(int /*vflag*/)
  dottangrad = bufout[6];
  dotgrad = bufout[7];

  // project tangent vector on tangent space and normalize it
  // check projection of tangent vector on tangent space 
  // and normalize it

  double buftan[3];
  double tandots;
+17 −42
Original line number Diff line number Diff line
@@ -281,10 +281,9 @@ void NEB_spin::run()
    if (uscreen) {
      if (verbose) {
        fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... "
                "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 "
                "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 "
                "... ReplicaTorqueN MaxAtomTorqueN\n");
                "GradV0 GradV1 GradVc EBF EBR RDT "
                "RD1 PE1 RD2 PE2 ... RDN PEN "
		"GradV0dottan ... GradVNdottan\n");
      } else {
        fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... "
@@ -295,10 +294,9 @@ void NEB_spin::run()
    if (ulogfile) {
      if (verbose) {
	fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... "
                "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 "
                "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 "
                "... ReplicaTorqueN MaxAtomTorqueN\n");
	    "GradV0 GradV1 GradVc EBF EBR RDT "
	    "RD1 PE1 RD2 PE2 ... RDN PEN "
	    "GradV0dottan ... GradVNdottan\n");
      } else {
        fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... "
@@ -370,9 +368,7 @@ void NEB_spin::run()
        fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc EBF EBR RDT "
                "RD1 PE1 RD2 PE2 ... RDN PEN "
                "pathangle1 angletangrad1 anglegrad1 gradV1 "
                "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 "
                "... ReplicaForceN MaxAtomForceN\n");
		"GradV0dottan ... GradVNdottan\n");
      } else {
        fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc "
@@ -385,9 +381,7 @@ void NEB_spin::run()
	fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque "
	    "GradV0 GradV1 GradVc EBF EBR RDT "
	    "RD1 PE1 RD2 PE2 ... RDN PEN "
                "pathangle1 angletangrad1 anglegrad1 gradV1 "
                "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 "
                "... ReplicaForceN MaxAtomForceN\n");
	    "GradV0dottan ... GradVNdottan\n");
      } else {
        fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque "
                "GradV0 GradV1 GradVc "
@@ -879,17 +873,8 @@ void NEB_spin::print_status()
      for (int i = 0; i < nreplica; i++)
        fprintf(uscreen,"%12.8g %12.8g ",rdist[i],all[i][0]);
      if (verbose) {
        fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg,
                all[0][3],freplica[0],fmaxatomInRepl[0]);
        for (int i = 1; i < nreplica-1; i++)
          fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                  180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg,
                  180-acos(all[i][6])*todeg,all[i][3],freplica[i],
                  fmaxatomInRepl[i]);
        fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3],
                freplica[nreplica-1],fmaxatomInRepl[nreplica-1]);
	for (int i = 0; i < nreplica; i++)
	  fprintf(uscreen,"%12.8g ",all[i][5]);
      }
      fprintf(uscreen,"\n");
    }
@@ -901,20 +886,10 @@ void NEB_spin::print_status()
              gradvnorm0,gradvnorm1,gradvnormc);
      fprintf(ulogfile,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt);
      for (int i = 0; i < nreplica; i++)
        //fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]);
        fprintf(ulogfile,"%12.8g %12.8g %12.8g %12.8g ",rdist[i],all[i][0],all[i][2],all[i][5]);
        fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]);
      if (verbose) {
        fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg,
                all[0][3],freplica[0],fmaxatomInRepl[0]);
        for (int i = 1; i < nreplica-1; i++)
          fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                  180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg,
                  180-acos(all[i][6])*todeg,all[i][3],freplica[i],
                  fmaxatomInRepl[i]);
        fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g",
                NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3],
                freplica[nreplica-1],fmaxatomInRepl[nreplica-1]);
	for (int i = 0; i < nreplica; i++)
	  fprintf(ulogfile,"%12.8g ",all[i][5]);
      }
      fprintf(ulogfile,"\n");
      fflush(ulogfile);