View Javadoc
1   // ******************************************************************************
2   //
3   // Title:       Force Field X.
4   // Description: Force Field X - Software for Molecular Biophysics.
5   // Copyright:   Copyright (c) Michael J. Schnieders 2001-2024.
6   //
7   // This file is part of Force Field X.
8   //
9   // Force Field X is free software; you can redistribute it and/or modify it
10  // under the terms of the GNU General Public License version 3 as published by
11  // the Free Software Foundation.
12  //
13  // Force Field X is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  // details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA 02111-1307 USA
21  //
22  // Linking this library statically or dynamically with other modules is making a
23  // combined work based on this library. Thus, the terms and conditions of the
24  // GNU General Public License cover the whole combination.
25  //
26  // As a special exception, the copyright holders of this library give you
27  // permission to link this library with independent modules to produce an
28  // executable, regardless of the license terms of these independent modules, and
29  // to copy and distribute the resulting executable under terms of your choice,
30  // provided that you also meet, for each linked independent module, the terms
31  // and conditions of the license of that module. An independent module is a
32  // module which is not derived from or based on this library. If you modify this
33  // library, you may extend this exception to your version of the library, but
34  // you are not obligated to do so. If you do not wish to do so, delete this
35  // exception statement from your version.
36  //
37  // ******************************************************************************
38  package ffx.ui.commands;
39  
40  import java.io.Serializable;
41  
42  /**
43   * The SimulationUpdate class is a serializable wrapper for FFX simulation data that changes during
44   * a simulation.
45   *
46   * @author Michael J. Schnieders
47   */
48  public class SimulationUpdate implements Serializable {
49  
50    private static final long serialVersionUID = 1L;
51    /** Constant <code>NONE=0</code> */
52    public static int NONE = 0;
53    /** Constant <code>SIMULATION=1</code> */
54    public static int SIMULATION = 1;
55    /** Constant <code>OPTIMIZATION=2</code> */
56    public static int OPTIMIZATION = 2;
57  
58    public boolean read = true;
59    // Type
60    public int type;
61    // Coordinates
62    public int numatoms;
63    public double[][] coordinates = null;
64    // Simulation Data
65    public double time = -0.1d;
66    public double temperature = 0.0d;
67    public double energy = 0.0d;
68    public double potential = 0.0d;
69    public double kinetic = 0.0d;
70    public double intermolecular = 0.0d;
71    public double pressure = 0.0d;
72    public double density = 0.0d;
73    public double[][] velocity = null;
74    public double[][] acceleration = null;
75    // Optimization Data
76    public int step = 0;
77    public double[][] gradients = null;
78    // Amoeba Data
79    public boolean amoeba;
80    public double[][] induced = null;
81  
82    /**
83     * Constructor for SimulationUpdate.
84     *
85     * @param n a int.
86     * @param t a int.
87     * @param a a boolean.
88     */
89    public SimulationUpdate(int n, int t, boolean a) {
90      numatoms = n;
91      amoeba = a;
92      type = t;
93      coordinates = new double[3][numatoms];
94      if (type == SIMULATION) {
95        velocity = new double[3][numatoms];
96        acceleration = new double[3][numatoms];
97      } else if (type == OPTIMIZATION) {
98        gradients = new double[3][numatoms];
99      }
100     if (amoeba) {
101       induced = new double[3][numatoms];
102     }
103   }
104 
105   /**
106    * isNewer
107    *
108    * @param message a {@link ffx.ui.commands.SimulationMessage} object.
109    * @return a boolean.
110    */
111   public boolean isNewer(SimulationMessage message) {
112     if (type == SIMULATION && time > message.getTime()) {
113       return true;
114     }
115     if (type == OPTIMIZATION && step > message.getStep()) {
116       return true;
117     }
118     return false;
119   }
120 
121   /** print */
122   public void print() {
123     if (type == SimulationUpdate.SIMULATION) {
124       System.out.println("Time: " + time + " Energy: " + energy);
125     } else {
126       System.out.println("Step: " + step + " Energy: " + energy);
127     }
128   }
129 }